Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务活动详情
一、题目描述
给定一个字符串,翻转每一个单词,但是单词之间的顺序不改变。
二、思路分析
题目的数据非常的令人舒服,前后没有空格,单词直接也没有多余的空格,几乎没有什么坑的地方,所以我们就随缘写了。
记录一下上一次空格在哪里,每次遇到空格的时候,就把两个空格之间的单词翻转。
翻转也很容易,一个for就能够解决,属于练练手感的题目,没有技术含量。
有个问题就是函数传递string类型参数的时候,这地方之前没搞清楚,这一次搞清楚了。
如果是这样子写,它是深拷贝,也就是说在函数里的s和外面的那个s不是同一个了。
void deal(string s,int x,int y){}
如果是这样子,它就会是引用,函数里对s的修改会影响外面的s
void deal(string &s,int x,int y){}
三、AC代码
class Solution {
public:
void deal(string &s,int x,int y){
while (x < y) {
swap(s[x], s[y]);
x++,y--;
}
return;
}
string reverseWords(string s) {
int l = s.length();
int last = -1;
for (int i=0; i<=l; i++) {
if (i==l || s[i] == ' ') {
deal(s, last+1, i-1);
last = i;
}
}
return s;
}
};
四、总结
字符串问题要熟练各种细节,比如说如何正确传参,要弄懂这个细节,在做题的时候才能够得心应手。