hdu 6170(正则表达式)

来源:互联网 发布:微信开发必须80端口 编辑:程序博客网 时间:2024/06/05 06:56

题目链接: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

#include<bits/stdc++.h>using 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"<<endl;//最后再判断替换后是否匹配        else cout<<"no"<<endl;    }    return 0;}