题目链接:点击打开链接
题解思路:因为数据就2500我们很容易想到dp,要是有想到dp那实现方法也很简单,看代码就懂了。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mx = 3e3+10;
int n,m,len1,len2;
char str[mx],stc[mx];
int dp[mx][mx];
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s",str+1);
scanf("%s",stc+1);
len1 = strlen(str+1);
len2 = strlen(stc+1);
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
for(int i=1;i<=len2;i++){
if(i==2&&stc[i]=='*') dp[i][0] = 1;
for(int j=1;j<=len1;j++){
if(isalpha(stc[i])){
if(str[j]==stc[i]) dp[i][j] = dp[i-1][j-1];
}else if(stc[i]=='.'){
dp[i][j] = dp[i-1][j-1];
}else{
dp[i][j] = max(dp[i][j],max(dp[i-1][j],dp[i-2][j]));
if((dp[i][j-1]||dp[i-1][j-1])&&str[j]==str[j-1])
dp[i][j] = max(dp[i][j],max(dp[i][j-1],dp[i-1][j-1]));
}
}
}
puts(dp[len2][len1]?"yes":"no");
}
return 0;
}