NC18386 字符串(尺取)

字符串

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

题意

小N现在有一个字符串S。他把这这个字符串的所有子串都挑了出来。一个S的子串T是合法的,当且仅当T中包含了所有的小写字母。小N希望知道所有的合法的S的子串中,长度最短是多少。

分析

对每个 ,我们要求最大的 ,使得 包含了所有小写字母。
显然, 是单调递增的。
于是我们开个桶记录一下每个字母出现了多少次,从左到右扫一遍即可。
时间复杂度是

代码如下

#include <bits/stdc++.h>

using namespace std; 

const int N = 1e6 + 5;
char s[N];
int cnt[255];

int main(){
    int i, j, n, m, tot = 0, ans = 1e9;
    scanf("%s", s + 1);
    n = strlen(s + 1);
    j = 1; cnt[s[1]]++; tot = 1;
    for(i = 2; i <= n; i++){
        if(!cnt[s[i]]) tot++;
        cnt[s[i]]++;
        while(cnt[s[j]] > 1){
            cnt[s[j]]--;
            j++;
        }
        if(tot == 26) ans = min(ans, i - j + 1);
    }
    printf("%d", ans);
    return 0;
}
每日一题 文章被收录于专栏

牛客的每日一题(换卫衣之路(bushi

全部评论

相关推荐

每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
面了这么多场试,总有公司总喜欢压力面一个小时面试+手撕,哪里不会就点哪里,说了不会不会还继续追着问不尊重求职者,稍微有些细节记不清了,就开始怀疑项目真实性以及人格让求职者开摄像头但是自己不开,说话声音还贼小,pardon几次就开始不耐烦的不知道这个算不算,手撕的时候,面试官人跑了。。。最后快结束才来
一纸丿繁华丶:你换位思考一下,自己在职场被领导push麻了,身心俱疲,现在有个机会让你放松一下,体验一把上位者的感觉,还能看着那些高学历人才、未来自己的竞争者,抓耳挠腮、手足无措的样子,没给你当场笑出来就不错了,理解一下面试官吧。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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