题目:
Given an input string, reverse the string word by word.
For example,
Given s = “the sky is blue”,
return “blue is sky the”.
题意:
给定一个字符串,将里面的单词进行反转。比如第一个单词会变成最后一个单词,最后一个单词会变成第一个单词。
思路:
这道题目只需要先将里面的单词一一反转,然后让整体字符串反转即可。不过需要注意的是里面的空白字符的要求。单词间只有一个空格,并且第一个单词之前,最后一个单词之后不能有空格。我们可以在反转结束后,去除多余的空格。
以上。
代码如下:
class Solution{
public:
void reverseWords(string &s) {
if (s.empty())return;
int begin = 0;
int length = s.length();
while (begin < length) {
while (begin < length && s[begin] == ' ')begin++;
int end = begin;
while (end < length && s[end] != ' ')end++;
reverseword(s, begin, end - 1);
begin = end;
}
reverseword(s, 0, length - 1);
removeExtraBlank(s);
}
void reverseword(string &s, int start, int end) {
while (start < end) {
swap(s[start], s[end]);
start++;
end--;
}
}
void removeExtraBlank(string &s) {
string temp;
int length = s.length();
int index = 0;
while (index < length) {
while (index < length && s[index] == ' ')index++;
if (index == length)break;
while (index < length && s[index] != ' '){
temp.push_back(s[index]);
index++;
}
temp.push_back(' ');
}
if (temp.back() == ' ')temp.pop_back();
s = temp;
}
};