http://oj.leetcode.com/problems/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".
看上去有点象以前两次reverse的那道题,但这道题有所不同的地方就是需要处理空格。
1,要求删除开头和结尾的多余空格。
2,如果两个单词之间有多余空格的话,也要删除。
这样的话,就不能用两次reverse的方法了。
解题思路:找到每一个单词,然后每次将单词加到要返回的字符串的前面。
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue",
return "blue is sky the".
看上去有点象以前两次reverse的那道题,但这道题有所不同的地方就是需要处理空格。
1,要求删除开头和结尾的多余空格。
2,如果两个单词之间有多余空格的话,也要删除。
这样的话,就不能用两次reverse的方法了。
解题思路:找到每一个单词,然后每次将单词加到要返回的字符串的前面。
AC代码:
public String reverseWords(String s) {
if(s==null) {
return s;
}
int begin = 0;
int end = 0;
while(begin<s.length()&&s.charAt(begin)==' ') {
begin++;
}
if(begin==s.length()) {
return "";
}
if(s.length()<=1) {
return s;
}
StringBuilder result = new StringBuilder("");
while(begin<s.length()&&end<s.length()) {
while(begin<s.length()&&s.charAt(begin)==' ') {
begin++;
}
if(begin==s.length()) {
break;
}
end = begin + 1;
while(end<s.length()&&s.charAt(end)!=' ') {
end++;
}
if(result.length()!=0) {
result.insert(0," ");
}
if(end<s.length()) {
result.insert(0,s.substring(begin,end));
} else {
result.insert(0,s.substring(begin,s.length()));
break;
}
begin = end + 1;
}
return result.toString();
}