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?

Analysis:

We reverse the whole string first, and then reverse each word again.

Solution:

public class Solution {
    public void reverseWords(char[] s) {
        reverse(s,0,s.length-1);

        int p1=0,p2=0;
        while (p1 < s.length){
            p2 = p1;
            while (p2 < s.length && s[p2]!=' '){
                p2++;
            }
            reverse(s,p1,p2-1);
            p1 = p2+1;
        }
    }

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

 

相关文章:

  • 2021-12-04
  • 2022-02-11
  • 2021-10-01
  • 2021-10-29
  • 2022-02-22
  • 2021-09-10
  • 2021-10-01
  • 2022-12-23
猜你喜欢
  • 2022-01-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-27
  • 2021-08-21
相关资源
相似解决方案