问题简介:
给定输入字符串和模式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
我第一次想到的是递归的做法,在输入字符串较少的情况下没问题,字符串很长的时候就不行了
解法二:
让我们在这里使用两个指针: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
小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海