题目:
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.
Follow up:
For C programmers, try to solve it in-place in O(1) extra space.
代码:
方法一——普通办法:
class Solution {
public:
string reverseWords(string s) {
int len = s.length();
vector<string> words;
while (s.length() > 0) {
int index = 0;
while (s[index] == ' ')index++;
s = s.substr(index);
int pos = s.find(" ");
if (pos > 0) {
words.push_back(s.substr(0, pos));
}
else {
if (s != "") {
words.push_back(s);
}
break;
}
s = s.substr(pos);
}
string res;
for (int i = words.size() - 1; i >= 0; i--) {
if (i == 0) {
res += words[i]; break;
}
res += words[i] + " ";
}
return res;
}
};
方法二——就地reverse:
class Solution {
public:
string reverseWords(string s) {
int storeIndex = 0, n = s.size();
reverse(s.begin(), s.end());
for (int i = 0; i < n; ++i) {
if (s[i] != ' ') {
if (storeIndex != 0) s[storeIndex++] = ' ';
int j = i;
while (j < n && s[j] != ' ') s[storeIndex++] = s[j++];
reverse(s.begin() + storeIndex - (j - i), s.begin() + storeIndex);
i = j;
}
}
return string(s.begin(), s.begin() + storeIndex);
}
};
想法:
多想思路