思路1: 遍历字符串找到要反转的条件:空格或者字符串末尾,再用swap()函数实现单词反转。
时间复杂度O(n2) 空间复杂度O(1)
class Solution {
public:
string reverseWords(string s) {
if(s.size()==0)
return s;
int start=0;//字母首
int end=0;//字母尾
for(int i=0;i<s.size()+1;i++){
if(s[i]==' '||s[i]=='\0'){
for(end=i-1;start<end;start++,end--){//end(i)为空格位置 end-1才为字母尾
swap(s[start],s[end]);//交换两个位置的字母
}
start=i+1;//跳过空格的下一个字母首
}
}
return s;
}
};
思路2: 遍历字符串找到要反转的条件:空格或者字符串末尾,利用迭代器和reverse()直接反转单词。
时间复杂度O(n),空间复杂度O(1)
class Solution {
public:
string reverseWords(string s) {
if(s.size()==0)
return s;
int start=0,end=0;//start字母首 end字母尾
for(int i=0;i<=s.size();++i){//i=s.size() \0
if(s[i]!=' '&&i<s.size())
end++;//找到空格位置end
else{
reverse(s.begin()+start,s.begin()+end);//左闭右开区间
start=end+1;//end指向空格位置 end+1为下一个单词首
end=start;//end和start保持一致 这样才能保证单词在一个区间里
}
}
return s;
}
};