当前位置: 首页 > java >正文

LeetCode 1156.单字符重复子串的最大长度

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

给你一个字符串 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 仅由小写英文字母组成。

滑动窗口,保证窗口内最多有两种字符,有两种字符时,保证一种字符的数量为1。
当窗口内有两种字符时,如果窗口大小为winSize,其中一种字符a的数量为1,另一种字符b的数量就是n-1
如果数量为n-1的字符a在窗口外还有字符,则整个窗口都是合法的子串,因为可以把窗口外的一个字符a和窗口内的字符b交换位置;否则窗口内合法的子串长度就是n-1,因为可以自由交换窗口内的字符b到窗口两端点。
找出最大的窗口内合法子串长度即可。

class Solution {
public:int maxRepOpt1(string text) {int cnt[26];for (char c : text) {++cnt[c - 'a'];}int left = 0;int ans = 0;map<char, int> cur;for (int i = 0; i < text.size(); ++i) {++cur[text[i]];while (cur.size() == 3 || cur.size() == 2 &&cur.rbegin()->second >= 2 && cur.begin()->second >= 2) {if (--cur[text[left]] == 0) {cur.erase(text[left]);}++left;}char more = cur.rbegin()->first;if (cur.begin()->second > cur.rbegin()->second) {more = cur.begin()->first;}int len = min(cnt[more - 'a'], i - left + 1);ans = max(ans, len);}return ans;}
};

如果text的长度为n,其中的字符种类数为m,则此算法时间复杂度为O(n),空间复杂度为O(m),本题m为26。

http://www.xdnf.cn/news/15322.html

相关文章:

  • 代码部落 20250713 CSP-J复赛 模拟赛
  • 婚后才明白,原来结婚真需要一点冲动!
  • 时序预测 | Matlab代码实现VMD-TCN-GRU-MATT变分模态分解时间卷积门控循环单元多头注意力多变量时序预测
  • (一)SAP Group Reporting (GR) 集团财务合并解决方案套件概述
  • java 基本数据类型所对应的包装类
  • 暑期自学嵌入式——Day01(C语言阶段)
  • C++中顶层const与底层const
  • 【开源项目】网络诊断告别命令行!NetSonar:开源多协议网络诊断利器
  • 【研报复现】开源证券:均线的收敛与发散
  • 从 Manifest V2 升级到 Manifest V3:常见问题与解决方案
  • exe文件图标修改器 - exe图标提取器(ico、png) - 修改360文件夹的图标为windows自带的图标
  • # 通过wifi共享打印机只有手动翻页正反打印没有自动翻页正反打印,而通过网线连接的主机电脑可以自动翻页正反打印
  • 设计模式:软件开发的高效解决方案(单例、工厂、适配器、代理)
  • 预处理器完整功能介绍和示例演示(LESS/SCSS)
  • DMDIS文件到数据库
  • 并查集 UnionFind Test01
  • 什么是RAG(Retrieval-Augmented Generation)?一文读懂检索增强生成
  • websocket连接时发生未知错误
  • SAP顾问职位汇总(第28周)
  • 快速生成 Android 的 Splash 的 9 Patch 图片
  • phpMyAdmin:一款经典的MySQL在线管理工具又回来了
  • DNS解析过程和nmap端口扫描
  • 【STM32实践篇】:F407 时钟系统
  • MacOS使用Multipass快速搭建轻量级k3s集群
  • Spring Boot 安全登录系统:前后端分离实现
  • ERA5的UV合并成矢量并按时间维度转为nc或tif
  • 【版本控制】Perforce Helix Core (P4V) 完全入门指南(含虚幻引擎实战)
  • Spring Boot 集成 Spring Security 完整示例
  • C++ 单例模式实现
  • 牛客周赛 Round 100