【错题集-编程题】包含不超过两种字符的最长字串(滑动窗口)

简介: 【错题集-编程题】包含不超过两种字符的最长字串(滑动窗口)

牛客对应题目链接:包含不超过两种字符的最长子串_牛客题霸_牛客网 (nowcoder.com)


一、分析题目

简单的滑动窗口问题。


二、代码

#include <iostream>
#include <unordered_map>
using namespace std;
 
int main()
{
    string s;
    cin >> s;
    int n=s.size();
    int res=0;
    int cnt=0;
    unordered_map<char, int> hash;
    int left=0, right=0;
    while(right<n)
    {
        hash[s[right]]++;
        if(hash[s[right]]==1) //0->1 多了一种字符
            cnt++;
        while(cnt>2)
        {
            hash[s[left]]--;
            if(hash[s[left]]==0) //1->0 少了一种字符
                cnt--;
            left++;
        }
        res=max(res, right-left+1);
        right++;
    }
    cout << res << endl;
    return 0;
}

三、反思与改进

思路基本没错,还是 “滑动窗口” 系列问题的练习量不够,导致问题考虑的不周到。


相关文章
|
8月前
|
Java
JAVA工具类匹配重复或者连续的字符和符号
JAVA工具类匹配重复或者连续的字符和符号
|
8月前
|
算法
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
|
9月前
|
存储 机器学习/深度学习 C语言
Day3 字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
Day3 字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
76 0
|
算法 测试技术
算法强化每日一题--字符串中找出连续最长的数字串
算法强化每日一题--字符串中找出连续最长的数字串
|
机器学习/深度学习 人工智能 算法
代码随想录训练营day52| 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组...
代码随想录训练营day52| 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组...
每日三题-无重复字符的最长子串、最长连续序列、找到字符串中所有字母异位词
每日三题 无重复字符的最长子串 最长连续序列 找到字符串中所有字母异位词
113 1
每日三题-无重复字符的最长子串、最长连续序列、找到字符串中所有字母异位词
|
索引
力扣刷题记录——748. 最短补全词、744. 寻找比目标字母大的最小字母、747. 至少是其他数字两倍的最大数
力扣刷题记录——748. 最短补全词、744. 寻找比目标字母大的最小字母、747. 至少是其他数字两倍的最大数
146 0
力扣刷题记录——748. 最短补全词、744. 寻找比目标字母大的最小字母、747. 至少是其他数字两倍的最大数
LeetCode 1869. 哪种连续子字符串更长
给你一个二进制字符串 s 。如果字符串中由 1 组成的 最长 连续子字符串 严格长于 由 0 组成的 最长 连续子字符串,返回 true ;否则,返回 false 。
85 0
|
人工智能
最长连续不重复子串
最长连续不重复子串
143 0
最长连续不重复子串
|
算法 前端开发 测试技术
【前端算法】字符串中连续最多的字符以及次数
双指针与双层循环“跳步”的比较
121 0