【LeetCode 557】Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务

144 阅读1分钟

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;
    }
};

四、总结

字符串问题要熟练各种细节,比如说如何正确传参,要弄懂这个细节,在做题的时候才能够得心应手。