带通配符的字符串匹配(动态规划)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带通配符的字符串匹配(动态规划)相关的知识,希望对你有一定的参考价值。
OJ地址:http://noi.openjudge.cn/ch0206/6252/
1 #include<string> 2 #include<cstdio> 3 #include<iostream> 4 using namespace std; 5 string A,B; 6 bool Judge(int a,int b); 7 void Init(); 8 int main() 9 { 10 // cin>>A>>B;//A with ? or * 11 getline(cin,A);getline(cin,B); 12 Init(); 13 cout<<(Judge(A.length()-1,B.length()-1)?"matched":"not matched"); 14 return 0; 15 } 16 void Init() 17 { 18 string Temp(""); 19 for(int i=0;i<A.length();i++){ 20 if(Temp[Temp.length()-1]==‘*‘&&A[i]==‘*‘) continue; 21 Temp=Temp+A[i]; 22 } 23 A=Temp; 24 } 25 bool Judge(int a,int b) 26 { 27 //if(A==B) return true; 28 if(A.empty()&&B.empty()) return true; 29 if(A[a]==‘*‘){ 30 if(a==0) return true; 31 int n=b; 32 /*do{ 33 if(n==-1) return false; 34 if(Judge(a-1,n)) return true; 35 }while(n--);*/ 36 while(n>=0){ 37 if(Judge(a-1,n)) return true; 38 n--; 39 } 40 return false; 41 } 42 if(A[a]==B[b]||A[a]==‘?‘){ 43 if(a==0&&b==0) return true; 44 else if(a==0||b==0){ 45 if(a==1&&A[0]==‘*‘) return true; 46 return false; 47 } 48 else return Judge(a-1,b-1); 49 } 50 return false; 51 }
以上是关于带通配符的字符串匹配(动态规划)的主要内容,如果未能解决你的问题,请参考以下文章