hdu 6170

题意:A,B2个字符串,.可以代替任意字符,*表示前面那个字符的任意次(0,1,2....,问是否完全匹配

思路:dp[i][j]表示A第i个B第j个是否匹配

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N=2502;
 5 
 6 char s1[N],s2[N];
 7 int dp[N][N];
 8 
 9 int main(){
10     int t;
11     cin>>t;
12     while(t--){
13         scanf("%s",s1+1);
14         scanf("%s",s2+1);
15         memset(dp,0,sizeof(dp));
16         dp[0][0]=1;
17         int n=strlen(s1+1),m=strlen(s2+1);
18         for(int i=2;i<=m;i++)
19             dp[0][i]=dp[0][i-2];
20         for(int i=1;i<=n;i++){
21             for(int j=1;j<=m;j++){
22                 if(s2[j]=='*'){
23                     if(dp[i][j-2]||dp[i][j-1]) dp[i][j]=1;
24                     else if((s1[i]==s2[j-1] || ( s2[j-1] == '.'&& s1[i]==s1[i-1] ) ) && dp[i-1][j]) dp[i][j]=1;
25                     else dp[i][j]=0;
26                 }
27                 else {
28                     if(s1[i]==s2[j]||s2[j]=='.'){
29                         if(dp[i-1][j-1]) dp[i][j]=1;
30                         else dp[i][j]=0;
31                     }
32                     else dp[i][j]=0;
33                 }
34             }
35         }
36         if(dp[n][m]) printf("yes\n");
37         else printf("no\n");
38     }
39     return 0;
40 }

 

posted on 2017-08-23 15:29  hhhhx  阅读(114)  评论(0编辑  收藏  举报

导航