题目 Reverse Words in a String
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue",
return "blue is sky the".
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 st
思路:首先将原始字符串按照word切分成单词数组,然后将单词数组逆序使用空格连接起来。
class Solution {
public:
vector<string> split(const string &s, char c) {
vector<string> v;
int start = -1;
bool flag = false;
for(int i = 0; i < s.length(); i ++){
if(flag == false) {
if(s[i] != c) {
start = i;
flag = true;
}
}
else {
if(s[i] == c){
flag = false;
v.push_back(s.substr(start, i - start));
}
}
}
if(flag){
v.push_back(s.substr(start, s.length() - start));
}
return v;
}
void reverseWords(string &s) {
vector<string> substrings = split(s, ' ');
s.erase();
if(substrings.size() > 0) {
for(vector<string>::reverse_iterator rit = substrings.rbegin(); rit != substrings.rend(); rit ++) {
s += *rit;
s.push_back(' ');
}
s.pop_back();
}
}
};