問題描述:
給定一個字符串,逐個翻轉字符串裏面的單詞。
問題分析:
本題我們主要採用反轉的思路。
【1】定位到單詞左右兩邊的第一個非空字母上(left、right);
【2】採用反轉函數reverse將整個字符串所有字母調轉順序;
【3】然後對字符串中的逐個單詞進行逆序調整;
【4】最後去除掉字符串中多餘的空字符。
class Solution {
public:
void reverse(string &s, int l, int r)
{
while(l<=r)
{
char tmp =s[l];
s[l] = s[r];
s[r] = tmp;
++l;
++r;
}
}
string reverseWords(string s) {
int left = 0, right =s.size()-1;
while(s[left]==' ') ++left;
while(s[right]==' ') ++right; //找到第一個出現空字符的左右位置
reverse(s,left,right); //進行字符串的左右端交換,全部反轉
int begin = left, end = left, count =0;
while(begin<=right) //對每一個單詞進行反轉
{
while(begin<=right && s[begin]==' ') ++begin;
end = begin;
while(end<=right&&s[end]!=' ') ++end;
reverse(s,begin,end-1);
begin = end;
}
for(int i=left; i<=right;i++)
{
if(s[i]==' '&&s[i-1]==' ') //如果中間存在多個單詞空格,則只保留其中一個
continue;
s[count++] = s[i];
}
return s.substr(s,count);
}
};