通配符?子字符串匹配主字符串次数_LeetCode第四十四题-字符串匹配

问题简介:

给定输入字符串和模式p,实现通配符模式匹配并支持规则’?’ 和’’

注:

1.’?’ 匹配任意一个字符

2.’ * ’ 匹配任意一个字符串包括空字符串

3.要两个字符串完全匹配而不是部分匹配

举例:

1:

输入:

s = “aa”

p = “a”

输出: false

解释: “a” 不完全匹配字符串 “aa”.

2:

输入:

s = “aa”

p = " * "

输出: true

Explanation: ’ * ’ 匹配任意字符串

3:

输入:

s = “cb”

p = “?a”

输出: false

解释: ‘?’ 匹配 ‘c’, 但第二个字符 ‘a’不匹配 ‘b’.

4:

输入:

s = “adceb”

p = “ab”

输出: true

解释: 第一个’ * ’ 匹配为空字符串,第二个 ’ * ’ 匹配字符串"dce".

5:

输入:

s = “acdcb”

p = "ac?b"

输出: false

解法一:Time Limit Exceeded

我第一次想到的是递归的做法,在输入字符串较少的情况下没问题,字符串很长的时候就不行了

857d2ec108f2dda94cac6ce355460898.png

解法二:

让我们在这里使用两个指针:s_idx迭代字符串,p_idx迭代模式,而s_idx

如果模式p_idx

否则,如果模式p_idx

如果模式中没有星号,即没有star_idx,则返回False.

如果有一个星,那么回溯:在最后一个星p_idx = star_idx + 1之后设置模式指针,并且字符串指针s_idx = s_tmp_idx + 1,即假设这次星与另一个字符匹配,保存当前字符串指针以查找可能的回溯s_tmp_idx = s_idx.

如果模式中的所有剩余字符都是星号,则返回True

f4d5e09bc86bbb0ba7839d1793eadd69.png

小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海

488a8b70abc3d06e1c1619bc8a756a62.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值