*发糖果

1004: 发糖果
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld
Submitted: 295 Accepted: 96
[Submit][Status][Web Board]
Description

为了迎接2016年的到来,某高校举行了元旦晚会,就在晚会的最后,大家的福利来了–分发糖果。在发糖果之前,工作人员早已将各种糖
果摆放好,假设所有糖果摆放在一条直线上。要求每个人只能拿一次糖果,并且只能拿走摆放位置连续的糖果。为了让更多的同学品尝到更多
的糖果,要求对于每种糖果,每人最多只能拿走一个。Byte学姐听到这个消息后很是兴奋,迫不及待的想要去拿糖果。鉴于Byte学姐今晚的
精彩表演,大家决定让她第一个上去拿糖果。那么,Byte学姐最多可以拿走多少个糖果呢?

Input

有多组测试数据
每组测试数据为一个字符串(0<=字符串长度<=10^5),代表已摆放好的糖果,每个字符串仅含有小写字母,不同的字母代表不同种类的
糖果

Output

每组数据输出占一行,包含一个整数,代表Byte学姐最多拿走的糖果个数

Sample Input

aaaaabbbbbbbbbccccccccccdddddd
vchsdgdyejwdsjskassajfshuaw

Sample Output

2
7
嘿~我发现我的理解能力确实有问题,读了好几遍题目都不知道到底怎么拿。
其实就是只能拿一次,且拿的糖果必须连续无相同糖果~

#include <stdio.h>
char a[100009];
int main()
{
    while(scanf("%s",a)!=EOF)
    {
        int s[26]={0};
        int cnt=0,max=0;
        for(int i=0;a[i]!='\0';)
        {
            if(s[a[i]-'a']==0)//查重
            {
                s[a[i]-'a']=i+1;//记录当前字母的后一个位置,便于返回
                i++;
                cnt++;
                if(cnt>max)
                    max=cnt;
            }
            else
            {
               i=s[a[i]-'a'];//返回到原来的地方重新计算
                for(int j=0;j<26;j++)
                    s[j]=0;

                 cnt=0;
            }
        }
        printf("%d\n",max);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Davenny/article/details/50699063
今日推荐