分析此题可发现此题只有四种状态:

①:"aaab"这种只有一组连续相同的字符串,直接统计有多少个连续的。

②:"aaabbaaa"这种有两组但是中间隔的超过一个,更新答案为当前连续个数+1;

③:"aaabaaa"这种有两组且中间隔一个且后一组为结束的,更新当前答案为两串之和

④:"aaabaaaba"这种有两组且中间隔一个且后一组不为结束的,更新当前答案为两串之和+1;

在写逻辑时:

一:在统计完当前子串长度后,判断此字母出现的总次数和当前字串长度的大小,如果前者大于后者,先用②更新一下(如果有此串后面有串且中间隔一个在后面会再更新一次覆盖掉);如果后者大于前者,就用①更新;

二:在统计完当前字串长度后,就要开始判断后面是否有相隔一个且相同的字串,如果有且后一个串不为结尾(即后一个串末尾-前一个串开头< 该字母出现的总次数),就用④更新;如果有且后一个串为结尾(即后一个串末尾-前一个串开头== 该字母出现的总次数),就用③更新。至此所有情况考虑完毕。

class Solution {
public:int maxRepOpt1(string text) {map<char,int>m;for (auto c : text) {m[c]++;}int flag=0;int j=0;int k=0;int res=0;for(int i=0;i<text.size();){flag=0;j=i+1;int cur=0;while(j<text.size()&&text[j]==text[i]){j++;}cur=j-i;if(j-i<m[text[i]])   res=max(res,j-i+1);else res=max(res,j-i);k=j;while(k<text.size()&&text[k+1]==text[i]){k++;flag=1;}if(flag==1&&k-i<m[text[i]]){res=max(res,k-i+1);}else if(flag==1&&k-i>=m[text[i]]){res=max(res,m[text[i]]); }i=j;}return res;}
};

在我们取值时可以使用滑动窗口,先确定当前串的左边界i,然后用j去向右寻找。因为j=i+1,所以在这一次搜索完当前连续的串时,下一次i的开头就是j,i=j即可

2023.6.3每日一题相关推荐

  1. 2023.7.8每日一题

    因为此题是有序数组,所以可以使用双指针O(n)过,维护两端的双指针,如果总和大于target,右指针左移;小于target左指针右移即可. class Solution { public:vector ...

  2. 2023.6.26每日一题

    假设此题没有num2的影响,那么就可以计算num1二进制的1的个数,就是要操作的次数. 此时题中有num2,我们不妨从小到大枚举次数k,一次将所有次数的num2减去,再计算1的个数      k为操作 ...

  3. 2023.6.8每日一题

    经过观察和样例和数据范围,发现此题不太好找规律,数据范围小,故可以用dfs+回溯解决 确定返回条件: 1.如果当前的使用的地砖数大于存的最小答案,就可以回溯,不再向下搜 2.如果没在1处返回并且当前铺 ...

  4. 2023.6.1每日一题

    在求最小值中的最大值或最大值的最小值时,往往采用二分解决,这道题二分的对象就是甜蜜度.在二分之前首先对price进行升序排序,在二分初始化中:left=0,right=price[n-1]-price ...

  5. 2023.7.1每日一题

    遍历O(n^2)能过,但可以O(n)过, 维护一个map,如果当前map中没有当前数字,就将target-当前数字和下标存入map中,否则返回当前数字下标和target-当前数字的下标 class S ...

  6. 2023.6.30每日一题

    遍历即可 class Solution { public:bool isCircularSentence(string sentence) {int n=sentence.size();int fla ...

  7. 2023.7.4每日一题

    先对每行排序,再将每行的所有列取最大值,一直加到ans里就行 class Solution { public:int matrixSum(vector<vector<int>> ...

  8. 2023.6.25每日一题

    判断矩形是否和圆有公共点,只需判断矩形上是否存在一点(x,y)满足点(x,y)到圆心的距离大于等于半径,如果满足则说明有公共点,不满足则说明没有公共点. 现在要找矩形上一点(x,y)到圆心的距离最小( ...

  9. 2023.6.23每日一题

    模拟 class Solution { public:int maximumValue(vector<string>& strs) {int ans=0;int flag=0;fo ...

最新文章

  1. Media Queries
  2. DEDECMS v5.5 GBK Final 的一个鸡肋漏洞
  3. 老焦专栏 | 如何做一个有说服力的方案?
  4. php同步邮件,php – 使用同步驱动程序在Laravel 4中排队电子邮件
  5. 使用正态分布变换(Normal Distributions Transform)进行点云配准
  6. asp php 对照表,asp 与php中常用函数对比
  7. linux 导出 excel文件名乱码,excel导出,文件名称中文乱码问题 · 大腿的博客
  8. 实战突击:PHP项目开发案例整合(第2版)
  9. STM32工作笔记0064---输入捕获实验
  10. 202012没有oracle加密,Windows2012远程桌面提示"这可能是由于 CredSSP 加密 Oracle 修正" 修复方法...
  11. iOS开发之三方分享(shareSDK)
  12. 循环神经网络 递归神经网络_递归神经网络-第3部分
  13. files函数提取文件名HTML,Excel小技巧之轻松提取文件夹中的文件名
  14. 自己动手做Arduino玩具(二)
  15. TCP Congestion性能测试分析
  16. 添加远程连接 Linux数据库与Navicat数据库建立连接
  17. 记录一次Spark小问题的求证过程
  18. java根据出生日期自动计算年龄(工具类)
  19. [Presentation]PPT英语陈述准备 常用句型
  20. 建网站选什么样的虚拟主机最适合

热门文章

  1. (转)汽车术语-Turbo
  2. TIP HBase 列 family和qualifier
  3. ajax请求设置同步,ajax 设置同步
  4. ajax 同步和异步区别
  5. 前后端交互 - JWT鉴权到底是何方神圣
  6. 小明哥学linux驱动之USB-OTG(基于gadget框架)
  7. 思科企业路由器受高危DoS漏洞影响
  8. php 实现格式化数字功能
  9. 一副图片带来的声望和恶意
  10. 苹果手表5各个版本区别_苹果手表