题目大意:给出两个字符串,一个字符可以替换成1--k个字符,问第一个字符串能否经过替换得到第二个字符串
解题思路:直接暴力
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 266
char str[maxn], leet[maxn];
int pos[maxn][2];
int K, len1, len2;
bool judge(int *S, int l2) {
int size = S[1] - S[0];
if(size + l2 > len2)
return false;
for(int i = 0, j = S[0]; i <= size; i++, j++)
if(leet[j] != leet[l2+i])
return false;
return true;
}
bool dfs(int l1, int l2) {
if(l1 >= len1 && l2 < len2 || l2 >= len2 && l1 < len1)
return false;
if(l1 >= len1 || l2 >= len2)
return true;
char tmp = str[l1];
if(pos[tmp][0] == -1) {
pos[tmp][0] = l2;
for(int i = 1; i <= K && i + l2 <= len2; i++) {
pos[tmp][1] = l2 + i - 1;
if(dfs(l1+1,l2+i))
return true;
}
pos[tmp][0] = -1;
}
else {
if(judge(pos[tmp],l2) && dfs(l1+1, l2 + pos[tmp][1] - pos[tmp][0] + 1))
return true;
}
return false;
}
int main() {
int test;
scanf("%d",&test);
while(test--) {
scanf("%d%s%s",&K, str, leet);
len1 = strlen(str);
len2 = strlen(leet);
memset(pos,-1,sizeof(pos));
if(dfs(0,0))
printf("1\n");
else
printf("0\n");
}
return 0;
}