题目来源:https://leetcode.com/problems/reverse-words-in-a-string/
问题描述
151. Reverse Words in a String
Medium
Given an input string, reverse the string word by word.
Example 1:
Input: "the sky is blue"
Output: "blue is sky the"
Example 2:
Input: " hello world! "
Output: "world! hello"
Explanation: Your reversed string should not contain leading or trailing spaces.
Example 3:
Input: "a good example"
Output: "example good a"
Explanation: You need to reduce multiple spaces between two words to a single space in the reversed string.
Note:
- A word is defined as a sequence of non-space characters.
- Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
- You need to reduce multiple spaces between two words to a single space in the reversed string.
------------------------------------------------------------
题意
倒序输出句子中的单词,并删除多余的空格
------------------------------------------------------------
思路
注意两点即可:
1. 句首没有多余的单词,从后往前遍历的时候要对句首单词做单独判断
2. 整个句子全是空格的情况
------------------------------------------------------------
代码
class Solution {
public String reverseWords(String s) {
StringBuffer sb = new StringBuffer();
int n = s.length(), i = n - 1, end = -1, begin = -1;
boolean flag = true;
for (i=n-1; i>=0; --i) {
if (s.charAt(i) == ' ') {
if (!flag) {
sb.append(' ');
sb.append(s.substring(i+1, end+1));
flag = true;
}
continue;
}
if (flag) {
end = i;
flag = false;
}
}
if (!flag) {
sb.append(' ');
sb.append(s.substring(0, end+1));
}
return sb.length() == 0? "":sb.toString().substring(1);
}
}