字符串

字符串

https://ac.nowcoder.com/acm/problem/18386

双指针(尺取法)

双指针(快慢指针)即可。
右指针先走,一直到满足条件后,维护一下长度的最小值,然后左指针开始右移,直到不满足子串含有所有小写字母,右指针继续右移动。

总的复杂度来说,右指针右移动n次,左指针右移也是n次。
复杂度是On

#include<bits/stdc++.h>
using namespace std;
char s[1000005];
int vis[130];
int main(){
    cin>>s+1;
    int sum=26,now=0;
    int l=1,r=0,mi=1e9,len=strlen(s+1);
    while(l<=len){
        while(r<len && now<sum){
            vis[s[++r]]++;
            if(vis[s[r]]==1) ++now;
        }
        if(now==sum) mi=min(mi,r-l+1);
        if(vis[s[l]]==1)  now--;
        vis[s[l++]]--;
    }
    cout<<mi;
    return 0;
}
每日一题 文章被收录于专栏

每日一题专栏

全部评论

相关推荐

流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
06-27 12:30
延安大学 C++
实习+外包,这两个公司底层融为一体了,如何评价呢?
一表renzha:之前面了一家外包的大模型,基本上都能答出来,那面试官感觉还没我懂,然后把我挂了,我都还没嫌弃他是外包,他把我挂了……
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务