题解 | #字符串#

字符串

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

题目考点:尺取法(双指针)
题目大意:给定一个字符串,问集齐26个字母所需要的最短区间是多长。
题目分析:右指针字符串,当26个字母集齐之后移动左边界,维护最短长度即可;
代码:

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

const int N = 26, M = 1000010;
int n, ans = M, ch[N];
string s1;

bool jud()  //判断26个字符是否集齐
{
    for(int i = 0; i < 26; i++)
        if(!ch[i]) return false;
    return true;
}

int main()
{
    cin>>s1;

    int len = s1.length();
    for(int l = 0, r = 0; r < len; r++)
    {
        ch[s1[r] - 'a'] ++ ;
        while(jud())   //如果集齐26个字母,维护最小值,移动左边界
        {
            ch[s1[l] - 'a']--;
            ans = min(ans, r - l + 1);
            l++;
        }
    }

    cout<<ans;
    return 0;
}
题解专栏 文章被收录于专栏

希望不断进步

全部评论

相关推荐

11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:28
点赞 评论 收藏
分享
评论
5
收藏
分享
牛客网
牛客企业服务