例题 简单版本
链接:https://ac.nowcoder.com/acm/contest/3571/B?&headNav=acm
来源:牛客网
“一刀建林流泪,两刀马云都得跪。”摆在你面前的一长条切糕,你想尝到切糕里面所有的果仁,什么核桃呀,杏仁呀,巴旦木呀…但因为切糕很贵,你要选取一段连续的切糕,使得你能吃到这份切糕里所有的果仁,切记切糕贵,所以要选取最短的长度并且要包含所有的果仁,这里的果仁可以简单的看做a果仁,b果仁,c果仁….,输出能包含所有果仁的最短长度。换句话说出现的果仁都要出现在你所选的区间里面,输出这个区间的最短长度。
输入描述:
第一行包含整数n(1≤n≤1000)——切糕的长度。第二行包含长度为n的字符串,它由英文字母表中的大写字母和小写字母组成。
输出描述:
输出一个整数,表示最小选取的长度。
示例1
输入
1
A
输出
1
示例2
输入
4
qqqE
输出
2
示例3
输入
9
bcdddbddc
输出
复制
3
#include<bits/stdc++.h>
using namespace std;
const int maxn=100005;
int main()
{
int n,max1=0,sum=0;
int vis[200]={0};
char a[maxn];
cin>>n;
getchar();
gets(a);
int j=0;
for(int i=0;i<n;i++)
{
if(vis[a[i]]==0)
{
vis[a[i]]=1;
sum++;
}
}
int len=1000005;
for(int i=0;i<n;i++)
{
int ans=0;int vis1[200]={0};
for(int j=i;j<n;j++)
{
if(vis1[a[j]]==0)
{
vis1[a[j]]=1;
ans++;
}
if(ans==sum)
{
len=min(len,j-i+1);
if(len==sum)
{
goto in;//直接跳出函数到in
}
}
}
}
in:;
cout<<len;
}