[LeetCode]-Reverse Words in a String

Given an input string, reverse the string word by word.

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

Clarification:

    • What constitutes a word?
      A sequence of non-space characters constitutes a word.
    • Could the input string contain leading or trailing spaces?
      Yes. However, your reversed string should not contain leading or trailing spaces.
    • How about multiple spaces between two words?
      Reduce them to a single space in the reversed string.

 

/*解题思路:
 * 1.将输入字符串首尾的空格去掉,并将字符串中出现的多个连续空格替换成一个
 * 2.翻转每个单词
 * 3.翻转整个字符串*/

public class Solution {
    private void reverseWord(  char[] arr, int start, int end ){
        char temp;
        while( start<end ){
            temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
            start++;
            end--;
        }
    }
    
    public String reverseWords(String s) {
        String str = s.trim().replaceAll("\\s+", " ");
        int len = str.length();
        char[] arr_str = str.toCharArray();
        int start = 0;
        int end = 0;
        while( start<len ){
            end = start;
            while( end<len && arr_str[end]!=' ' ){
                end++;
            }
            reverseWord( arr_str, start, end-1 );
            start = end+1;
        }
        reverseWord( arr_str, 0, len-1 );
        return new String( arr_str );   
    }
}

 

posted on 2014-09-21 16:05  笑傲1024  阅读(94)  评论(0)    收藏  举报