文章目录

  • 1. 题目
  • 2. 解题

1. 题目

如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。

给你一个字符串 text,你只能交换其中两个字符一次或者什么都不做,然后得到一些单字符重复的子串。
返回其中最长的子串的长度。

示例 1:
输入:text = "ababa"
输出:3示例 2:
输入:text = "aaabaaa"
输出:6示例 3:
输入:text = "aaabbaaa"
输出:4示例 4:
输入:text = "aaaaa"
输出:5示例 5:
输入:text = "abcdef"
输出:1提示:
1 <= text.length <= 20000
text 仅由小写英文字母组成。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-for-longest-repeated-character-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 把每个字符,每段的开始结束位置存起来
  • 在检查相邻的段之间的间距是不是1,进行分类讨论
class Solution {public:int maxRepOpt1(string text) {text.push_back('-');//方便代码处理vector<vector<vector<int>>> p(26);// 存放每个字符每个连续段的 {开始位置,结束位置}char prev = text[0];int start = 0, ans = 1;for(int i = 0; i < text.size(); ++i){if(text[i] != prev){p[prev-'a'].push_back({start, i-1});ans = max(ans, i-start);//什么都不做的情况下的最大长度start = i;prev = text[i];}}for(int i = 0; i < 26; ++i){int len = p[i].size();//有多少段该字符for(int j = 1; j < len; ++j){int prevEnd = p[i][j-1][1];int n1 = p[i][j-1][1]-p[i][j-1][0]+1;int curStart = p[i][j][0];int n2 = p[i][j][1]-p[i][j][0]+1;if(curStart-prevEnd == 2)//隔一个字符{ans = max(ans, n1+n2+(len>2 ? 1 : 0));} //3段及以上,可以在多添加1个字符进来else//间隔多个字符{ans = max(ans, max(n1+1, n2+1));}   // 两段不能联通,只能过去1个字符}}return ans;}
};

20 ms 11.7 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1156. 单字符重复子串的最大长度相关推荐

  1. sqlserver text最大长度_1156. 单字符重复子串的最大长度

    1156. 单字符重复子串的最大长度 这道题测试用例都比较简单,用暴力也可以过. 遍历text字符串,假设当前遍历下标为i,我们匹配text[i]这个字符,向右遍历找到第一个不是text[i]的字符b ...

  2. Leetcode-1156 Swap For Maximum Repeated Substring(单字符重复子串的最大长度)

    因为只能交换一次,先考虑如果不交换最大的值. 接下来考虑交换,有四种情况 ① aaabaaa型 交换一下可以将相邻的两块连在一起,答案就是两块长度之和 ② aaabbbaaaa 交换一下也不能连起两块 ...

  3. LeetCode 1062. 最长重复子串(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定字符串 S,找出最长重复子串的长度.如果不存在重复子串就返回 0. 示例 1: 输入:"abcd" 输出:0 解释:没有重复子串. ...

  4. leetcode最长无重复子串384题

    给定一个字符串,请找出其中无重复字符的最长子字符串. 样例 样例 1: 输入: "abcabcbb" 输出: 3 解释: 最长子串是 "abc". 样例 2: ...

  5. 最长重复子串(Rabin-Karp算法)

    目录 最长重复子串 C++代码 最长重复子串 1044. 最长重复子串 给出一个字符串 S,考虑其所有重复子串(S 的连续子串,出现两次或多次,可能会有重叠). 返回任何具有最长可能长度的重复子串.( ...

  6. 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  7. 【Leetcode 3】无重复字符的最长子串

    题目描述 2020年8月25日更新 一次遍历 思路: (1)一次遍历,用list存放遍历的连续不重复的子串,当遍历到重复的字符时,用index()方法获得list当中重复字符a的索引,然后将list重 ...

  8. leetcode题库3-- 无重复字符的最长子串

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...

  9. 【LeetCode】不含重复字符的最长子字符串

    题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度. 示例 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符 ...

最新文章

  1. LeetCode 1115. Print FooBar Alternately--多线程并发问题--Java解法--CyclicBarrier, synchronized, Semaphore 信号量
  2. Linux基础优化方法(一)———优化命令提示符和yum源仓库
  3. SAP全球技术研发者大会上海站电子票欣赏
  4. (转)在ios android设备上使用 Protobuf (使用dll方式)
  5. Git初学札记(六)————在远程新建本地Branch与在本地新建远程Branch
  6. 电芯容量在前期循环中容量增加_锂离子电池容量“跳水”背后元凶找到了!——非均匀压力...
  7. 如何配置struts+hibernate,基本使用方法
  8. [干货来袭]DevExpress ASP.NET示例资源最全分享!(二)
  9. Android系统终端命令大全
  10. jemalloc java_jemalloc源码结构分析
  11. python 根据地址求经纬度 谷歌_利用google地图根据地址批量获取经纬度
  12. 使用Scylla获取免费代理IP
  13. c语言直接输出PDF,C语言格式化输出总结.pdf
  14. 清朝盛衰的六个时间点!
  15. 人工智能课程必背知识点
  16. lombok 不生效
  17. Mysql之一台服务器上装多个mysql-yellowcong
  18. excel自动筛选_自动更改Excel筛选器标题
  19. 学堂在线工程伦理课后习题
  20. PS切片工具(切图bug有阴影) - 解决篇

热门文章

  1. php 打包上传的文件,PHP单文件上传原理及上传函数的打包
  2. python tfidf特征变换_机器学习的“万能模板” - 数据分析
  3. DataReceivedEventHandler 委托 接收调用执行进程返回数据
  4. MFC读取配置文件GetPrivateProfileString
  5. java动态json入库_从JSon File动态生成模式
  6. TD-SCDMA智能天线波束赋形能力的讨论
  7. leetcode——15.3Sum
  8. Linux基础提高_系统性能相关命令
  9. asp.net登录状态验证
  10. zbb20180117 汉字转拼音 pinyin4