标签:
Sample Input
2
3
mississippi
nni55i55ippi
2
foobar
|=o08ar
Sample Output
1
0
/** 题意:给出一个normal串,一个leet串,看能否符合关系的映射 做法:dfs 将两个串进行匹配注意初始化 **/ #include <iostream> #include <string.h> #include <stdio.h> #include <cmath> #include <algorithm> #define maxn 110 using namespace std; char ch[maxn]; char ch1[maxn]; char alp[30][10]; char c[10]; int dfs(int k,int a,int b,int len,int len1) { if(a == len && b == len1) return 1; if(a == len || b == len1) return 0; for(int i=0; i<k; i++) { if(b+i<len1) { memset(c,‘\0‘,sizeof(c)); for(int j=0; j<=i; j++) { c[j] = ch1[b+j]; } bool isok = false; if(strcmp(alp[ch[a]-‘a‘],"") == 0) ///当前字母还没有匹配 { isok = true; strcpy(alp[ch[a]-‘a‘],c); } if(isok || (strcmp(alp[ch[a]-‘a‘] ,c) == 0)) { if(dfs(k,a+1,b+i+1,len,len1)) return 1; } if(isok) { strcpy(alp[ch[a]-‘a‘],""); ///回溯 } } } return 0; } int main() { // freopen("in1.txt","r",stdin); int T; scanf("%d",&T); while(T--) { int k; scanf("%d",&k); memset(alp,‘\0‘,sizeof(alp)); scanf("%s %s",ch,ch1); int len = strlen(ch); int len1 = strlen(ch1); int tt = 0; tt = dfs(k,0,0,len,len1); printf("%d\n",tt); } return 0; }
标签:
原文地址:http://www.cnblogs.com/chenyang920/p/4733177.html