给你一个长度为 n,只包含小写字母的字符串 “ a0a1a2…an-1”。 它的核心字符串定义
为最短的且包含全部 26 个小写字母的子串。 这样的子串可能没有,也可能只有一个,还有
可能有多个,所以你只需要输出它的长度,如果没有这样的输出-1 即可。 注意:一个字符
串 “ a0a1a2…an-1” 的子串是指“ aiai+1ai+2…aj” (0 <= i <= j < n) 。
★ 数据输入
输入的第一行只有一个正整数 n( 1 <= n <= 10^6)。 输入的第二行是一个长度为 n,
只包含小写字母的字符串。
★ 数据输出
输出一行, 包含一个整数,表示核心字符串的长度,如果不存在输出-1。
输入示例 输出示例
27 26
abcdefghijklmnopqrstuvwxy -1
zz
4
haha
#include<stdio.h>
void main()
{
char str[1000000],c;
int n,a[27]={0},c_len=0,min=10000000,q=0;
a[26]=26;
scanf("%d",&n);
scanf("%s",&str);
for(int i=0;i<n;++i)
{
c=str[i];
if(!a[c-'a'])
{
a[26]--;
}
a[c-'a']++;
while(!a[26])
{
c_len=i+1-q;
if(min>c_len)
{
min=c_len;
}
a[str[q]-'a']--;
if(!a[str[q]-'a'])
a[26]++;
q++;
}
}
if(min==10000000)
printf("-1\n");
else
printf("%d\n",min);
}