Given an input string, reverse the string word by word.
For example,
Given s = “the sky is blue”,
return “blue is sky the”.
Update (2015-02-12):
For C programmers: Try to solve it in-place in O(1) space.
给你一个字符串,里面是一个个的单词,返回倒序的单词组合。
import java.util.Stack;
public class ReverseWordsinaString {
/*
* Given s = "the sky is blue", return "blue is sky the".
*/
public static String reverseWords(String s) {
Stack<String> st = new Stack<String>();
// 直接使用split 效率不高
int begin = 0;
int end = s.length()-1;
// 实现trim
while (begin <= end && s.charAt(begin) == ' ') {
begin++;
}
while (begin <= end && s.charAt(end) == ' ') {
end--;
}
if (begin > end)
return "";
StringBuffer sb = new StringBuffer();
while (begin <= end) {
//每次都要首先去掉多余空格
while (begin <= end && s.charAt(end) == ' ') {
end--;
}
int tempEnd = end;
while(begin <= end&&s.charAt(end) != ' ') {
end--;
}
String tempString = s.substring(end+1, tempEnd + 1);
sb.append(tempString + " ");
end--;
}
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = " a b ";
System.out.print(reverseWords(s));
}
}