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

LeetCode 滑动窗口 每个字符最多出现两次的最长子字符串

每个字符最多出现两次的最长子字符串

给你一个字符串 s ,请找出满足每个字符最多出现两次的最长子字符串,并返回该
子字符串
的 最大 长度。
示例 1:
输入: s = “bcbbbcba”
输出: 4
解释:
以下子字符串长度为 4,并且每个字符最多出现两次:“bcbbbcba”。
示例 2:
输入: s = “aaaa”
输出: 2
解释:
以下子字符串长度为 2,并且每个字符最多出现两次:“aaaa”。
提示:
2 <= s.length <= 100
s 仅由小写英文字母组成。

题解

本体需要找到满足条件的最长子字符串,所以我们使用滑动窗口进行解题

由于最长子字符串的长度未知,所以滑动窗口是不定长滑动窗口

我们分别用 l 与 r 代表滑动窗口的左边有右边界(这里采用的有效窗口区域不包括 r 的位置)

采用一个数组 arr 对窗口中出现过的字母的次数进行统计

定义 int res = 2 记录返回值

然后循环遍历字符串直到 r == strlen(s) 退循环

循环过程中假如 arr[s[r]-‘a’] < 2 则 r++

否则说明该字母已经出现过两次了

arr[s[l]-‘a’]–

l++

在一次更新完窗口之后子字符串的长度为 r-l 找到最大的 r-l 赋给 res 即可

代码如下↓

int maximumLengthSubstring(char* s) {
    int l=0,r=1;
    int arr[26];
    memset(arr,0,sizeof(arr));
    arr[s[l]-'a']++;
    int res = 2;
    while(r<strlen(s))
    {
        if(arr[s[r]-'a']<2)
        {
            arr[s[r]-'a']++;
            r++;
        }
        else
        {
            arr[s[l]-'a']--;
            l++;
        }
        if(r-l>res)
        {
            res = r-l;
        }
    }
    return res;
}

http://www.kler.cn/news/316594.html

相关文章:

  • 中小微企业生产管理利器-- 超轻量生产工单系统
  • 微信支付开发-后台统计工厂实现
  • 优化SQL查询的常见方法
  • FPGA随记——VIVADO中ASYNC_REG指令
  • 解决Echarts:宽度100%,渲染的宽度却是100px
  • Vue3快速入门+axios的异步请求(基础使用)
  • 基于SpringBoot的旅游网站系统
  • 硬盘数据能否自己在家恢复?探索数据恢复的可行性与方法
  • 信息技术引领的智能化未来
  • 滚雪球学SpringCloud[5.3讲]: 配置管理中的高可用与容错
  • How can I stream a response from LangChain‘s OpenAI using Flask API?
  • 认识知识产权——商标
  • postgresql gcc编译选项解释
  • JAVA执行引擎详细介绍
  • Qt Creator 集成开发环境 常见问题
  • 【代码随想录Day25】回溯算法Part04
  • CPU使用率较高排查和解决思路
  • vue + leaflet + 天地图实现搜索省份后高亮
  • Linux bash脚本本地开发环境(Git Bash)配置
  • 干货满满:嵌入式电阻的重要作用全知晓
  • 实验——完全使用Ansible部署多台服务器的服务
  • CTF 技能树 LOG -GIT泄露 笔记
  • 【磨皮美白】基于Matlab的人像磨皮美白处理算法,Matlab处理
  • react hooks--useContext
  • 【Nginx】在 Docker 上安装 Nginx 的详细指南
  • CVE-2024-46103
  • 无源蜂鸣器简介
  • 【百日算法计划】:每日一题,见证成长(017)
  • Python 类class的用法详解
  • 渗透测试综合靶场 DC-2 通关详解