给定一个字符串,逐个翻转字符串中的每个单词。
说明
- 单词的构成:无空格字母构成一个单词
- 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
- 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
开始循环,遇到空格符直接跳过,如果是非空格,如果index不为0说明不是第一个单词,那么在他后面加个空格符。然后通过while循环找到下一个空格的位置。最后resize重置s的大小。
class Solution {
public:
/*
* @param s: A string
* @return: A string
*/
string reverseWords(string s) {
reverse(s.begin(),s.end());
int index = 0;
for (int i = 0;i < s.size();i++) {
if (s[i] != ' ') {
if (index != 0) s[index++] = ' ';
int j = i;
while (j < s.size() && s[j] != ' ') s[index++] = s[j++];
reverse(s.begin() + index - (j - i),s.begin() + index);
i = j;
}
}
s.resize(index);
return s;
}
};
在网上看到另一种方法:
string reverseWords(string s) {
string word, line;
int size=s.length();
int i=size-1, begin=size-1, end=size-1;
while(i >= 0) {
while(s[i]==' ' && i>=0) {
begin--;
end--;
i--;
}
while(s[i]!=' ' && i>=0) {
begin--;
i--;
}
word.resize(0);
for(int j=begin+1; j<=end; j++){
word.append(1, s[j]);
}
if(begin == 0)
line = line + word;
else
line = line + word + " ";
end = begin;
}
return line;
}