LeetCode题解—424.替换后的最长重复字符,用最长的时间换来最简单的方法

解题思路

这道题和最长子序列有相似之处,可以理解为先把最长子序列找出来,在找的过程中就可以利用替换来增加子序列的长度,也可以理解为在还有替换次数的情况下可以忽视遇到的不相同的元素。
以上是大概思路。

首先是找升级版的最长子序列,因为可以替换。逐个遍历下去判断即可,这是最简单的方法了,暴力解决。
找完之后,如果还有替换次数没用完,那就继续换,length++。最后得到结果

最后我的时间是1304ms,击败5%的人哈哈哈哈哈哈哈。

class Solution {
public:
    int characterReplacement(string s, int k){
       char temp; //记录当前元素
       int length = 0;//记录当前匹配串的长度
       int maxL = 1;//记录最大长度
       int sLength = s.length(); //s长度
       if(s.length() == 0)
            return 0;
       int recordK = k;//记录替换次数
       int pos;//记录下标位置
       for(int i = 0; i < s.length(); i++){
           recordK = k;//更新替换次数
           pos = i + 1;//开始比较的元素是当前元素的下一个
           temp = s[i];//记录当前元素
           length = 1;//更新序列长度

           while(pos < sLength && recordK >= 0){ //当s未匹配完或替换次数未用完
        
            if(temp == s[pos]){ //与这一次序列的元素相同时
                //cout << "temp=" << endl;

                length++; //直接加长度
                pos++;
            }else{
                if(recordK == 0)
                    break;
                recordK--;
                length++;
                pos++;
          }

       }

       while(recordK > 0 && length < s.length()){//如果替换次数没用完则继续换且字符串还有未替换的字符
           length++;
           recordK--;
       }

       if(length > maxL)
            maxL = length;

    }

    return maxL;
       

    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值