其他分享
首页 > 其他分享> > AcWing 4077.K显性字符

AcWing 4077.K显性字符

作者:互联网

给定一个由小写字母构成的字符串 s
字符 c称为字符串 s 的 k 显性字符,当且仅当字符串 s 的所有长度不小于 k 的子串都包含字符 c
对于给定的字符串 s,请你找到一个最小的 k,使得 s 中至少存在一个 k显性字符。

输入格式

一个由小写字母构成的字符串 s

输出格式

一个整数,表示 k的最小可能值。

数据范围
前 6个测试点满足 1≤|s|≤10。
所有测试点满足 1≤|s|≤105

输入样例1:

abacaba

输出样例1:

2

输入样例2:

zzzzz

输出样例2:

1

输入样例3:

abcde

输出样例3:

3

#include<bits/stdc++.h>

using namespace std;
int times[100000];
int dis[26][100000];
int main()
{
    string s;
    cin>>s;
    int m= s.size();
    int n;//表示第几个字符
    for(int i=0; i<m; i++)
    {
        n=s[i]-'a';///表示第几个字符
        times[n]++;
        dis[n][times[n]]=i;///所在位置
    }
    int ans =2e9;
    for(int i=0; i<26; i++)
    {
        int topdis=dis[i][1]+1;///第一次出现距离开头的距离;注意是要+1
        for(int j=1; j<times[i]; j++)
        {

            ///求相同字母每次相邻间隔出现的最大距离
            topdis =max(topdis,dis[i][j+1]-dis[i][j]);
        }
        //cout<<m-dis[i][times[i]]<<"*"<<endl;
        topdis=max(topdis,m-dis[i][times[i]]);//最后一个到结尾的长度
        ///不同字母的最大间隔中找最小的间隔
        ans = min(ans,topdis);

    }
    printf("%d\n",ans);
    return 0;
}

标签:字符,int,4077,样例,AcWing,字符串,dis,字母,显性
来源: https://blog.csdn.net/bixie_go/article/details/121450683