力扣(151.剑指offer58-Ⅱ)补8.10

力扣(151.剑指offer58-Ⅱ)补8.10,第1张

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;

    }

};

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/3002892.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存