151(翻转字符串里的单词——AC)
这道题细节很多,做了很多次,这次写完还是有bug——忘记写 s.resize(slow),自己检查出来了以后加上了,然后还是不对,又检查了好一会还是没有解决,最后决定一句一句的cout出来,发现我把s.resize加到for循环里面了。改完以后就顺利的通过了,总的来说,也算是锻炼了自己的debug能力。。
class Solution {
public:
void reverse(string& s,int start,int end){
for(int i=start,j=end;i<=j;i++,j--){
swap(s[i],s[j]);
}
}
void removeExtraSpaces(string& s){
int slow = 0;
for(int fast =0;fast<s.size();fast++){
if(s[fast] !=' '){
if(slow != 0){
s[slow] =' ';
slow++;
}
while(fast<s.size() && s[fast] != ' '){
s[slow] = s[fast];
slow++;
fast++;
}
}
}
s.resize(slow);
}
string reverseWords(string s) {
removeExtraSpaces(s);
//cout<<s<<endl;
reverse(s,0,s.size()-1);
//cout<<s<<endl;
int j = 0;
for(int i =0;i<=s.size();i++){
if(i==s.size() || s[i] ==' '){
reverse(s,j,i-1);
j = i+1;
}
}
return s;
}
};
卡码网:55右旋转字符串—AC
28.实现 strStr()——AC
459.重复的字符串——AC
两道关于KMP的题目都做出来了,嘿嘿!