LC 186 Reverse Words in a String II(M)

Given an input string, reverse the string word by word. A word is defined as a sequence of non-space characters.

The input string does not contain leading or trailing spaces and the words are always separated by a single space.

For example, Given s = "the sky is blue", return "blue is sky the".

Could you do it in-place without allocating extra space?

边界条件

解题思路

通过两遍翻转,先单个字串翻转,然后全部字符串一起反正 两次翻转保证每个字符串的顺序正常,

public void reverseWords(char[] s) {
    int i=0;
    //  每个字单独翻转
    for(int j=0; j<s.length; j++){
        if(s[j]==' '){
            reverse(s, i, j-1);        
            i=j+1;
        }
    }
    // 最后一个字单独翻转
    reverse(s, i, s.length-1);

    // 整个字符串全部翻转
    reverse(s, 0, s.length-1);
}

public void reverse(char[] s, int i, int j){
    while(i<j){
        char temp = s[i];
        s[i]=s[j];
        s[j]=temp;
        i++;
        j--;
    }
}

Last updated

Was this helpful?