暴力模拟。。好好读题就好了。。羡慕英语好的
#include<bits/stdc++.h> using namespace std; typedef long long LL; bool vis[150]; string t; string p,p1; int q; bool ok(string t) { if(t.length()<p1.length()) return false; else { int l=1; //在i指针遇到‘*‘前,l无具体意义,只为抵消-1的影响; //遇到‘*‘后,l表示 ‘空串 或者 string of bad lowercase English letters‘的长度 for(int i=0; i<p.length(); i++) { if(t[i+l-1]==p[i] || p[i]==‘?‘&&vis[t[i+l-1]]) continue; else if(p[i]==‘*‘) { for(l=0; t.length()-l+1>p.length(); l++) if(vis[t[i+l]]) return false; } else return false; } if(t.length()-l+1!=p.length()) return false; return true; } } int main() { while(cin>>t) { memset(vis,0,sizeof(vis)); p1.clear(); for(int i=0; i<t.length(); i++) vis[t[i]]=true; cin>>p; for(int i=0; i<p.length(); i++) if(p[i]!=‘*‘) p1.push_back(p[i]); cin>>q; while(q--) { cin>>t; if(ok(t)) puts("YES"); else puts("NO"); } } }
时间: 2024-10-18 13:20:11