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。