您的位置:首页 > 其它

hdu5311--Hidden String

2015-07-26 10:16 239 查看
题目大意:给出一个母串,一个模式串,把模式串任意分成三部分,在母串中按顺序匹配,问是否存在这样子的匹配。

分析:暴力。枚举两个分割的位置,然后判断第一部分是否有相应的匹配,匹配成功则母串中的指针指向分割位置+1,再判断第二部分第三部分,同理。当然,第三部分匹配成功就return true。

代码:

#include <cstdio>
#include <cstring>

char s[200], t[] = "anniversary";
int len;

bool ok(int x, int y) {
int f1 = 0, f2 = 0, f3 = 0;
for(int i = 0; i < len; i++) {
if(!f1) {
if(s[i] == t[0]) {
int f = 1;
for(int j = 1; j <= x && f; j++)
if(s[i+j] != t[j]) f = 0;
if(f) {
i = i+x;
f1 = 1;
}
}
}
else if(!f2) {
if(s[i] == t[x+1]) {
int f = 1;
for(int j = x+2; j <= y && f; j++)
if(s[i+j-x-1] != t[j]) f = 0;
if(f) {
i = i+y-x-1;
f2 = 1;
}
}

}
else if(!f3) {
if(s[i] == t[y+1]) {
int f = 1;
for(int j = y+2; j <= 10 && f; j++)
if(s[i+j-y-1] != t[j]) f = 0;
if(f) return true;
}
}
}
return false;
}

int main() {
int T;
scanf("%d", &T);
while(T--) {
scanf("%s", s);
len = strlen(s);
int flag = 0;
for(int i = 0; i < 9 && !flag; i++)
for(int j = i+1; j < 10 && !flag; j++)
if(ok(i, j)) flag = 1;
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: