Match the string--hdu1797(模拟)
http://acm.hdu.edu.cn/showproblem.php?pid=1797
就是模拟
我的思路是标记aba 和h的位置
然后就判断是否正确 就行了
还有就是 最后 fkfkfkfk交叉也可以
#include <iostream> #include <cstring> #include <algorithm> #include <queue> #include <cstdio> #include <cstdlib> #include <cctype> #include <math.h> #include <ctype.h> using namespace std; #define memset(a,b) memset(a,b,sizeof(a)) #define N 101000 typedef long long ll; char str[N]; int main() { int T; scanf("%d",&T); while(T--) { int flag=0; scanf("%s",str); int len=strlen(str); int abc,h; abc=h=-1; if(strstr(str,"aba")) abc=strstr(str,"aba")-str; if(strstr(str,"h")) h=strstr(str,"h")-str; if(abc==-1 || h==-1 || h==len-1) flag=1; for(int i=0; i<abc; i++) { if(str[i]!='a') { flag=1; break; } } int v1=0,v2=0; for(int i=abc+3; i<h; i++) { if(str[i]!='b' && str[i]!='d') { flag=1; break; } if(str[i]=='d' && str[i]=='b') { flag=1; break; } if(str[i]=='b') v1++; if(str[i]=='d') v2++; } if(v1!=0 && v2==0) flag=1; if(v1>1) flag=1; v1=v2=0; for(int i=h+1; str[i]; i++) { if(str[i]!='f' && str[i]!='k') { flag=1; break; } if(str[i]=='f') v1++; if(str[i]=='k') v2++; } if(v1==0 && v2==0) flag=1; if(v1==0 && v2==0 && v1!=v2) flag=1; if(flag==1) printf("NO\n"); else printf("YES\n"); } return 0; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步