原题出自:
LeetCode Online Judge
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.
我的解答:
public class Solution {
public String reverseWords(String s) {
//clear redundant spaces
StringBuffer sb = new StringBuffer(s.trim());
for(int i=1;i < sb.length() - 1;i++)
if(sb.charAt(i-1) == ' ' && sb.charAt(i) == ' '){
sb.deleteCharAt(i-1);
i--;
}
//cut words
String[] sa = sb.toString().split(" ");
if(sa.length == 0)
return "";
//reverse word by word
int len = sa.length;
String tmp = null;
for(int i=0;i < len / 2;i++){
tmp = sa[i];
sa[i] = sa[(len - 1) - i];
sa[(len - 1) - i] = tmp;
}
//recombine string
String result = new String(sa[0]);
for(int i=1;i < sa.length;i++)
result += " " + sa[i];
return result;
}
}
总结:
1.StringBuffer类的deleteCharAt(int index),用于删除字符串中下标为index的字符。
2.String类的" ".split(" ")的返回值为0,但"a b".split(" ")的返回值为3,其中切割后的第二个字符串为"",可以理解为split之前先进行trim(),然后再切词,其中两个空格相连的位置会切出一个""串。
3.反转字符串之时,若字符串长度为2x,则按上面的方式遍历字符串刚好到x,但不包括x。当字符串长为2x+1时,也只要x就好。