题目
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 这道题目的关键是要把三个注意点给考虑到:
a 单词是按照空格分隔。
b 字符串前后可以有空格,返回的时候不需要有这类空格。
c 当中重复的空格可以有,返回的时候只留一个。
2 关于前后的空格,trim() 函数可以处理。
3 可以这样考虑。从尾部开始,每次碰到空格,就代表之前的是一个单词,加入到新的字符串中,并且加一个空格。这样扫描一遍,也就逆序的加好了。不要忘记最后一个单词也手动加。
4 注意stringbuffer 添加部分字符数组的3个参数的含义:数组,起始点,长度。
5 另外,如果没有条件3。就是不同数量的空格也逆序的返回的话,可以有个更有意思的方法。这里就说说思路。
a 第一遍扫描,从头到尾,把每个单词给逆序。
b 第二遍,直接把整个字符串给逆序。
c 这样也只需要一个方法了。
public class Solution {
public String reverseWords(String s) {
if(s.length()==0){
return s;
}
s=s.trim();
char[] ch = s.toCharArray();
StringBuffer sb = new StringBuffer();
int end = ch.length-1;
for(int i = ch.length-1;i>=0;i--){
if(ch[i]==' '){
sb.append(ch,i+1,end-i).append(' ');
while(i>=0 && ch[i]==' '){
i--;
}
end = i;
}
}
sb.append(ch,0,end+1);
return new String(sb);
}
}