保留 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