https://leetcode.com/problems/reverse-words-in-a-string/
根据题目说明,字符串开始与结尾会有多个空白字符,两个单词之间的空白字符数可能有多个,要求反转输出整个句子,字符串前后不能有空格,单词之间只有一个空格表示。
解题思路:先把每个单词反转,然后再把整个句子反转输出即可。
class Solution {
public:
//每个单词反转,或是整个句子反转
void reverseWord(string &s,int i,int j){
while(i < j){
char c = s[i];
s[i] = s[j];
s[j] = c;
i++;
j--;
}
}
void reverseWords(string &s) {
int i = 0,j = 0,l = 0;
int len = s.length();
int cnt = 0;
while(true){
//把字符串的首部为空格的去掉
while(i < len && s[i] == ' ')
i++;
if(i == len)
break;
//cnt表示单词的个数,满足一个单词则在单词后面加入空格
if(cnt)
s[j++] = ' ';
//l记录当前的单词的首部下标
l = j;
//字符向前平移
while(i < len && s[i] != ' ')
{
s[j] = s[i];
i++;
j++;
}
reverseWord(s,l,j-1);
cnt++;
}
//重新设置s字符串大小
s.resize(j);
//反转整个句子
reverseWord(s,0,j-1);
}
};