LeetCode 44.通配符匹配(ε-NFA解法)

题意

给定一个字符串 ( s s s) 和一个字符模式 ( p p p) ,实现一个支持 ′ ? ′ '?' ? ′ ∗ ′ '*' 的通配符匹配。

'?' 可以匹配任何单个字符。
'*' 可以匹配任意字符串(包括空字符串)。

如:
" ∗ a ∗ b " "*a*b" "ab"可以匹配 " a d c e b " "adceb" "adceb"(第一个 ∗ * 为空,第二个 ∗ * d c e dce dce)

限制字母表为小写字母

(另有LeetCode 10.正则表达式匹配与其相似,但更像正则表达式)

题解

因为这学期正好在学形式语言与自动机这门课,这道题显然是一个正则表达式的问题,就尝试模拟了一下正则表达式转 ϵ − N F A \epsilon-NFA ϵNFA。(虽然最后跑出来特别慢,但好处是直接按部就班走,不需要动脑子)

先构造出空串 ϵ \epsilon ϵ N F A : NFA: NFA
在这里插入图片描述
对于每个输入字符,在原有的 N F A NFA NFA上进行修改,产生一个新的自动机。
考虑给定字符 a a a的三种情况:
( 1 ) (1) (1) a a a是小写字母。
构造新自动机的方法很简单:使原有的终结状态 F 0 F_0 F0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值