Beautiful String

来源:互联网 发布:淘宝在ipad上无法横屏 编辑:程序博客网 时间:2024/06/05 10:25

总之此题分为三个步骤:记录连续字符,删除重复的连续字符,进行判断。

坑点在于中间的连续字符必须小于等于前一个和后一个,也就是说只需要判断中间的连续就OK了.本来是自己编写了几个函数也可以过得。但是开始用着C++内存爆掉了。然后只好重新来。略坑,

#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using namespace std;char s[25000001];char ss[25000001];int p[25000001];int main(){    int i,len,k,t,flag;    scanf("%d",&t);    while(t--)    {        scanf("%d",&len);        getchar();        scanf("%s",s);        k    = 0;        flag = 0;        memset(p,0,sizeof(p));        p[0] = 1;        ss[0] = s[0];        for(i = 1 ;i < len ;i++)        {            if(s[i]==s[i-1])            {                p[k]++;            }            else            {                k++;                p[k]=1;                ss[k] = s[i];            }        }        if(k<2)        {            cout<<"NO"<<endl;            continue;        }        for(i = 0 ;i < k ;i++)        {            if(ss[i]+1==ss[i+1]&&ss[i+1]+1==ss[i+2])            {                if(p[i]>=p[i+1]&&p[i+1]<=p[i+2])                {                    flag = 1;                    break;                }            }        }        if(flag)        {            cout<<"YES"<<endl;        }        else        {            cout<<"NO"<<endl;        }    }    return 0;}


0 0
原创粉丝点击