151.反转字符串中的单词
思想是先全部反转,再找单词,start和end标注单词开头和结尾,每遍历到一个单词,就把它反转,再自行加空格,遍历到空格时就可以直接continue跳过。
用的双指针,实现了字符串的原地修改。另外就是指针只能加,不能减。
class Solution {
public:
string reverseWords(string s) {
int end,start,idx=0;
reverse(s.begin(),s.end());
for(int i=0;i
if(s[i]!=' '){
start=i;
}
else continue;
end=start;
while(s[end]!=' '&&end
s[idx++]=s[end++];
}
reverse(s.begin()+idx-(end-start),s.begin()+idx);
i=end;这一步容易忘,找到start后就没再遍历i了,还停留在start的位置,要更新到end。
s[idx++]=' ';
}
s.erase(s.begin()+idx-1,s.end());
return s;
}
};
剑指Offer58-II.左旋转字符串
没啥好说的就上个代码吧。当然暂时用这种简单解法练stl,用熟了这种题就不用stl了。
class Solution {
public:
string reverseLeftWords(string s, int n) {
s.append(s,0,n);
s.erase(0,n);
return s;
}
};
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)