题解 | #字符串#

字符串

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;
}
题解专栏 文章被收录于专栏

希望不断进步

全部评论

相关推荐

合不合适,我自己说了才算
码农索隆:hr:“真执着啊,来我公司当法人吧”
点赞 评论 收藏
分享
Vincent777...:实习经历可以考虑放上去,对于软件使用方面可以细化一些,比如调整为:熟悉基于LSDYNA的瞬态动力学仿真分析,熟悉基于WORKBENCH的结构拓扑优化
我的简历长这样
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 15:37
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

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