goto+双指针运用示例

例题 简单版本
链接: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; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值