天天看点

【Leetcode字符串】541. 反转字符串 II(模拟的好坏之分!!)Leetcode541

文章目录

  • Leetcode541
    • 1.问题描述
    • 2.解决方案

Leetcode541

1.问题描述

【Leetcode字符串】541. 反转字符串 II(模拟的好坏之分!!)Leetcode541

2.解决方案

思路很简单就直接模拟,但是时间上需要很好的模拟,统一化处理才会很快,前面错误的就是没模拟好,后面的算法模拟的很好,这个回来看看慢慢熏陶!
//错误麻烦的
class Solution {
public:
    string reverseStr(string s, int k) {
        int count=0;
        for(int i=0;i<s.size();i++){
            count++;
            if((count%(2*k)==0)) reverse(s[i-2*k+1],s[i-2*k+1+k]);
        }
        int end=count%(2*k);
        if(end<k){
            reverse(s[s.size()-end],s[s.size()]);
        }
        if(end>=k){
            reverse(s[s.size()-end],s[s.size()]);
        }
    }
};
           
//正确的简洁的
class Solution1 {
public:
    string reverseStr(string s, int k) {
        for (int i=0; i<s.size();i+=(2 * k)) {
            //将以下两种情况统一处理,reverse左闭右开
            //1.每隔2k个字符的前k个字符进行反转
            //2.剩余字符小于2k但大于或等于k个,则反转前k个字符
            if (i + k <= s.size()) {
                reverse(s.begin() + i, s.begin() + i + k );
                continue;
            }
            //3.剩余字符少于k个,则将剩余字符全部反转
            reverse(s.begin() + i, s.begin() + s.size());
        }
        return s;
    }
};