蓝桥杯备考:双指针(滑动窗口)算法之字符串

这道题咱首先用26个元素的数组来充当哈希数组来标记26个字母出现的个数

比如'a'-'a'放在0号元素,'b'-'a'放在1号元素

kind从0开始,如果进窗口的元素之前是0,就让kind++

如果满足kind==26的时候就是合法的一个子串,就进入循环,每次更新字符串长度,让left指的元素出窗口,我们来写一下代码

cpp 复制代码
#include <iostream>
using namespace std;
string s;
int mp[26];
int kind;
int main()
{
    cin >> s;
    int n = s.size();
    int ret = 1e6+10;
    for(int left = 0,right = 0;right <n;right++)
    {
        if(mp[s[right]-'a']++ == 0) kind++;
        while(kind == 26)
        {
            ret = min(ret,right-left+1);
            if(mp[s[left]-'a']-- == 1) kind--;
            left++;
        }
        
    }
    cout << ret << endl;
    
    
    
    
    
    return 0;
}
相关推荐
sprite_雪碧几秒前
排版类问题(机试高频)
c语言·数据结构·算法
酉鬼女又兒1 分钟前
零基础入门前端JavaScript 核心语法:var/let/const、箭头函数与 setTimeout 循环陷阱全解析(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·蓝桥杯
暮冬-  Gentle°2 分钟前
设计模式在C++中的实现
开发语言·c++·算法
2501_908329855 分钟前
实时音频处理C++实现
开发语言·c++·算法
dapeng28705 分钟前
移动语义与完美转发详解
开发语言·c++·算法
bbbb3658 分钟前
算法工程中的可扩展性与分布式实现方案的技术7
算法
Shining05968 分钟前
AI 编译器系列(六)《Stable Diffusion 在 InfiniTensor 推理框架中的适配与工程实践》
人工智能·算法·stable diffusion·大模型·图像生成·ai编译器·infinitensor
佩奇大王9 分钟前
P159 摆动序列
java·开发语言·算法
weixin_537590459 分钟前
《C程序设计语言》练习答案(练习1-7)
linux·c语言·算法
!停13 分钟前
C++基础入门(缺省参数,函数重载,引用)
开发语言·c++·算法