https://leetcode.com/problems/reverse-words-in-a-string/
151. Reverse Words in a String
Medium
6362394FavoriteShare
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.
又是一个剑指offer
不过可喜可贺的是 比自己去年百度现场面 写的代码利索多了
注意结尾是否有还未输出的字符串的处理
还有substr的第二个参数是长度!不是位置!
class Solution {
public:
string reverseWords(string s) {
int len = s.length();
if (len == 0) {
return "";
}
string ans = "";
reverse(s.begin(), s.end());
int st = -1;
for (int i = 0; i < len; i ++) {
if (s[i] != ' ' && st == -1) {
st = i;
}
if (st != -1 && s[i] == ' ') {
string tmp = s.substr(st, i-st);
reverse(tmp.begin(), tmp.end());
ans += tmp;
ans += " ";
st = -1;
}
}
if (st != -1) {
string tmp = s.substr(st, s.length()-st);
reverse(tmp.begin(), tmp.end());
ans += tmp;
} else {
ans.erase(ans.end() - 1);
}
return ans;
}
};