带通配符的字符串匹配

发布时间 2023-12-06 11:39:07作者: towboat

 

http://ica.openjudge.cn/function1/3/

 

 

 

 const int N =1004;
 
 int n,m,f[N][N];
 char a[N],b[N];
 
 signed main(){
 	int i,j; 
	cin>>a+1>>b+1;
	 n=strlen(a+1); m=strlen(b+1);
	for(i=1;i<=n;i++) 
		if(a[i]=='*') f[i][0]=1;
		else break;
		
	f[0][0]=1;
	for(i=1;i<=n;i++)
	 for(j=1;j<=m;j++){
	 	 if(a[i]=='?'||a[i]==b[j]) f[i][j]|= f[i-1][j-1];
	 	 else if(a[i]=='*')
	 	 f[i][j]|= f[i-1][j]|f[i][j-1]|f[i-1][j-1]; 
	 }
	if(f[n][m]) cout<<"matched"; else cout<<"not matched";
	cout<<endl;
 }