题目要求
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.
click to show clarification.
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.
讲一个字符串中的单词逆序输出,单词中字母顺序不发生改变。其中,字符串首位的空格应删去,字符串中如果存在多余的空格,只需输出一个空格。
思路一:正则表达式
关于正则表达式的详细信息,请参考我的这篇博客
在这里,我们只需要将句子中的单词通过split的正则表达式读取出来即可。这里用到的正则表达式为\s+
,也就是遇到一个或多个空白时断句。
public String reverseWords(String s) {
String[] array = s.trim().split("\\s+");
String result = "";
for(int i = array.length-1 ; i>0 ; i--){
result += array[i] + " ";
}
return result + array[0];
}
思路二:双指针
其实双指针这里也用了String的API,不过核心的思路还是在于通过双指针找到一个单词的位置,然后通过获得子字符串的方法将其提取出来加入到结果集中。
public String reverseWords(String s){
String trimmed = s.trim();
int prev = trimmed.length();
int index = prev;
StringBuilder result = new StringBuilder();
while ((index = trimmed.lastIndexOf(' ', index-1)) > 0) {
if (index < prev-1) {
result.append(trimmed.substring(index+1, prev));
result.append(" ");
}
prev = index;
}
result.append(trimmed.substring(index+1, prev));
return result.toString();
}
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。