字符串(尺取法)

字符串

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

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

题意:
给定一字符串s,找到其包含所有小写字母的最短子串。

分析:
枚举区间,首先想到尺取法。
尺取法:先初始化区间[0,-1],尺取移动右端点至区间[l,r]为合法区间,然后在满足条件的情况下不断向右移动左端点,缩小合法区间长度,更新ans最小值。尺取结束后答案即为ans。

代码:

#include <bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
char a[1000005];
int b[30];
int ok(){
    for(int i=0;i<26;i++){
        if(b[i]==0){
            return 0;
        }
    }
    return 1;
}
int main()
{
    scanf("%s",a);
    int len=strlen(a);
    int l=0,r=-1,ans=inf;
    for(int i=0;i<len;i++){
        r++;
        b[a[i]-'a']++;
        while(ok()){
            ans=min(ans,r-l+1);
            b[a[l]-'a']--;
            l++;
        }
    }
    printf("%d",ans);
}
全部评论

相关推荐

Java抽象带篮子:你这实习经历没突出亮点啊,怎么包装实习经历可以看看我的置顶帖子。冲春招可以看看我的置顶帖子[偷笑R]帖子里写了怎么改简历,怎么包装实习经历,还有2个高质量可速成的项目话术,和我的牛客八股笔记专栏
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务