字符串

字符串

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

//字符串
//枚举+尺取法 
#include <bits/stdc++.h> 
using namespace std;
string s;
int sts[30];//统计字母个数 
bool pd(int *sts)//判断统计字母是否满足26个 
{
    int i;
    for(i=0;i<26;i++)
    {
    if(sts[i]==0)    return false;
    }
    return true;
}
int main()
{
    cin>>s;
    int i,j,minn=s.size()+500,flag=0,p=0;//p为左指针 
    for(i=0;i<s.size();i++)//右指针移动 
    {
        int flag=0;
        sts[s[i]-'a']++;
        while(pd(sts)&&p<i-26)//当字符串合法 
        {
            flag=1;//标记合法,后面左指针可能要向后移动进行 
            minn=min(minn,i-p+1);//更新最短长度 
            if(minn==26)    {cout<<minn<<endl;return 0;}//当长度为26时直接输出结束了 
            sts[s[p]-'a']--;//
            p++;//左指针试着向右移动 
        }
        if(flag)//左指针返回一位 
        {
        p--;
        sts[s[p]-'a']++;
        }
    }
    cout<<minn<<endl;
全部评论
能用插入代码功能插入代码么?这样看好难受啊呜呜呜 pd这个函数可以不用(省掉26的常数),具体怎么做你可以先思考一样
点赞 回复
分享
发布于 2021-02-26 15:05

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务