CF#306- A - Two Substrings-水题

来源:互联网 发布:隔音玻璃效果好吗 知乎 编辑:程序博客网 时间:2024/05/16 15:31

给出一个字符串,

求是否同时存在 ”AB“  ”BA“   

先遍历一次AB,然后标记掉,再遍历一遍BA就好了

预防出现 ABA AB这种情况

还要先遍历一次BA,标记掉再遍历AB


#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <iostream>#include <queue>#include <map>#include <set>#include <vector>using namespace std;char tm[100005];int vis[100005];int main(){        int i;     scanf("%s",tm+1);    int n=strlen(tm+1);    if (n<4)    {        printf("NO\n");        return 0;    }    int cun=0;        for (i=1;i<=n;i++)    {        if (tm[i]=='A'&&tm[i+1]=='B')        {            cun=1;            vis[i]=vis[i+1]=1;            break;        }            }    int flag=0;    for (i=1;i<=n;i++)    {        if (tm[i]=='B'&&tm[i+1]=='A')            if (!vis[i]&&!vis[i+1])            {                flag=1;                 break;            }     }        if (cun&&flag)    {   printf("YES\n");    return 0;    }    cun=0;    memset(vis,0,sizeof(vis));    for (i=1;i<=n;i++)    {        if (tm[i]=='B'&&tm[i+1]=='A')        {            cun=1;            vis[i]=vis[i+1]=1;            break;        }            }    flag=0;    for (i=1;i<=n;i++)    {        if (tm[i]=='A'&&tm[i+1]=='B')            if (!vis[i]&&!vis[i+1])            {                flag=1;                 break;            }     }    if (cun&&flag)    {   printf("YES\n");    return 0;    }    else        printf("NO\n");                    return 0;    }


0 0
原创粉丝点击