LeetCode刷题(Java)——5.Reverse Words in a String

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

Example:  

Input: "the sky is blue",
Output: "blue is sky the".

Note:

  • A word is defined as a sequence of non-space characters.
  • Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
  • You need to reduce multiple spaces between two words to a single space in the reversed string.

Follow up: For C programmers, try to solve it in-place in O(1) space.

这题不知道为什么,右下角没有调试的按钮,所以我虽然把自己的想法写出来了,但是不清楚有没有运行成功。这里就不贴出来了,讲一下我的思路:

先将整个字符串首尾对调,然后以空格符分隔得到字符数组,再将每个字符数组继续首尾对调。

 

看了文档,给的方法更简单:

方法一:两次循环。首先通过空格将字符串分隔,然后以相反的顺序提取单词。

方法二:一次循环。以相反的顺序遍历字符串,我们跟踪一个词的开始和结尾,当我们在单词开头时,添加它。

方法二贴上被AC的代码:

public class Solution {
    public String reverseWords(String s) {
        StringBuilder reversed = new StringBuilder();
        int j = s.length();
        for(int i = s.length() - 1; i >= 0; i--){
            if(s.charAt(i) == ' '){
                j=i;
            }
            else if(i == 0 || s.charAt(i-1) == ' '){
                if(reversed.length() != 0){
                    reversed.append(' ');
                }
                reversed.append(s.substring(i, j));
            }
        }
        return reversed.toString();
    }
}

运行时间4ms.大家可以看懂我的代码自己写,相信我,你是可以办到的。

简述一下substring:

      它是截取字符串的一个方法,substring(int beginIndex, int endIndex)表示子字符串从beginIndex处开始取值,取到长度为endIndex-beginIndex的字符串,即包含beginIndex,不包含endIndex。

 

 

 

你可能感兴趣的:(LeetCode)