186. Reverse Words in a String II

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?

Related problem: Rotate Array

此题和rotate array比较像,解题思路也是一样的,代码如下:

public class Solution {

    public void reverseWords(char[] s) {

        int n =s.length;

        reverse(s,0,n-1);

        int start= 0;

        for(int i=0;i<n;i++){

            if(s[i]==' '){

                reverse(s,start,i-1);

                start = i+1;

            }

        }

        reverse(s,start,n-1);

    }

    public void reverse(char[] s,int start,int end){

        while(start<end){

            char temp = s[end];

            s[end] = s[start];

            s[start] = temp;

            start++;

            end--;

        }

    }

}

原文地址:https://www.cnblogs.com/codeskiller/p/6363917.html