HDU 6170-正则表达式

题意

字符串模式匹配,'.'匹配任何一个字符,'*'表示它的前一个字符可以任意出现(0次或多次),给出字符串和模式串,询问是否匹配

分析

和标准正则表达式不同的是".*"模式串在题意下不能匹配"abcde"这样的字符串

按题意".*"的意思是相同字符的0个或多个重复串

那么我们把模式串中的".*"替换成"(.)\1*"即可

队友用其他的dp做法比较快,90ms,用c++库的正则表达式要600+ms

代码

(使用g++)

#include <iostream>
#include <cstdio>
#include <string>
#include <regex>
using namespace std;
int main(){
    int cas;
    scanf("%d",&cas);
    string s1,s2;
    while(cas--){
        cin>>s1>>s2;
        s2=regex_replace(s2,regex("\\.\\*"),"(.)\\1*");
        printf(regex_match(s1,regex(s2))?"yes\n":"no\n");
    }
    return 0;
}

  

转载于:https://www.cnblogs.com/shuiming/p/7413726.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值