本文共 886 字,大约阅读时间需要 2 分钟。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6170
代码来源:http://blog.csdn.net/algzjh/article/details/77484741
由不会正则表达,当然这道题也可以dp做,好奇就去看了一下正则。链接:http://www.runoob.com/java/java-regular-expressions.html
#includeusing namespace std;const int MAXN=2600;string s,p;int main(){ int T; cin>>T; while(T--) { cin>>s>>p; string s1=".*";//题目里特殊字符 string s2="(a*|b*|c*|d*|e*|f*|g*|h*|i*|j*|k*|l*|m*|n*|o*|p*|q*|r*|s*|t*|u*|v*|w*|x*|y*|z*" "|A*|B*|C*|D*|E*|F*|G*|H*|I*|J*|K*|L*|M*|N*|O*|P*|Q*|R*|S*|T*|U*|V*|W*|X*|Y*|Z*)";//根据题目构造串s2 int len=s2.length(); auto pos=p.find(s1);//找到这些特殊字符位置 while(pos!=string::npos) { p.replace(pos,2,s2);//将p串中哪些特殊位置按s2规则替换 pos=p.find(s1,pos+len);//更新位置 } regex pat(p);//最后将替换后的串用正则regex给pat if(regex_match(s,pat)) cout<<"yes"<