保留 space 并反转 string_explain logic_Else 任何其他优化代码
Preserving space and reversing the string_explain logic_Else any other optimized code
static void reverseString(String input) {
char[] inputArray = input.toCharArray();
char[] result = new char[inputArray.length];
for (int i = 0; i < inputArray.length; i++) {
if (inputArray[i] == ' ') {
result[i] = ' ';
}
}
int j = result.length - 1;
for (int i = 0; i < inputArray.length; i++) {
if (inputArray[i] != ' ') {
if (result[j] == ' ') {
j--;
}
result[j] = inputArray[i];
j--;
}
}
System.out.println(input + " --> " + String.valueOf(result));
}
有人解释了 both for 循环的工作原理,感到困惑。还有其他优化代码吗?
第一个 for 循环将 space 存储在输入数组中相应 space 的结果数组中,即,为了保留 space,只要有 space 在输入数组中,第一个 for 循环在结果数组中的相同索引位置存储一个 space。
由于 space 已经存储,因此字符串的其余部分在第二个循环中反转。
输入数组中存在的 space 在第二个循环中使用 if 语句被忽略。并且如果在结果数组中遇到space,则在反转get时,它会移动到下一个索引位置,通过递减j的值并递增i的值来以相反的顺序存储剩余的字符串
由于 SAI 已经解释了代码,您可以使用这种替代方法在单个循环中实现此目的
代码
static void reverseString(String input){
char[] inputArray = input.toCharArray();
int inputStrLen = inputArray.length;
char[] result = new char[inputStrLen];
int j=0;//counter for result array
for(int i= inputStrLen-1 ; i>=0 ;i-- ) // iterate in reverse order
{
if(inputArray[j]== ' ') {
result[j++]= ' ';
i++; //preserve i index
continue;
}
else
{
if (inputArray[i]!=' ') { // assign non space character to result array
result[j++] = inputArray[i];
}
}
}
System.out.println(input + " --> " + String.valueOf(result));
}
样本输出
Hi I love Whosebug --> wo l frev OkcatSevolIiH
static void reverseString(String input) {
char[] inputArray = input.toCharArray();
char[] result = new char[inputArray.length];
for (int i = 0; i < inputArray.length; i++) {
if (inputArray[i] == ' ') {
result[i] = ' ';
}
}
int j = result.length - 1;
for (int i = 0; i < inputArray.length; i++) {
if (inputArray[i] != ' ') {
if (result[j] == ' ') {
j--;
}
result[j] = inputArray[i];
j--;
}
}
System.out.println(input + " --> " + String.valueOf(result));
}
有人解释了 both for 循环的工作原理,感到困惑。还有其他优化代码吗?
第一个 for 循环将 space 存储在输入数组中相应 space 的结果数组中,即,为了保留 space,只要有 space 在输入数组中,第一个 for 循环在结果数组中的相同索引位置存储一个 space。
由于 space 已经存储,因此字符串的其余部分在第二个循环中反转。
输入数组中存在的 space 在第二个循环中使用 if 语句被忽略。并且如果在结果数组中遇到space,则在反转get时,它会移动到下一个索引位置,通过递减j的值并递增i的值来以相反的顺序存储剩余的字符串
由于 SAI 已经解释了代码,您可以使用这种替代方法在单个循环中实现此目的
代码
static void reverseString(String input){
char[] inputArray = input.toCharArray();
int inputStrLen = inputArray.length;
char[] result = new char[inputStrLen];
int j=0;//counter for result array
for(int i= inputStrLen-1 ; i>=0 ;i-- ) // iterate in reverse order
{
if(inputArray[j]== ' ') {
result[j++]= ' ';
i++; //preserve i index
continue;
}
else
{
if (inputArray[i]!=' ') { // assign non space character to result array
result[j++] = inputArray[i];
}
}
}
System.out.println(input + " --> " + String.valueOf(result));
}
样本输出
Hi I love Whosebug --> wo l frev OkcatSevolIiH