Wildcard Matching解题心得
来源:https://leetcode.com/problems/wildcard-matching/description/
题目描述
- 输入两个字符串
s p
,字符串
s
只包含字母,字符串
p 还包含特殊字符'?','*'
- 其中
'?'
表示匹配任意一个字母 '*'
表示匹配任意字符串,包括空字符串
- 其中
- 判断 s p ,是否匹配成功
解题
- 这到题类似于之前的通配符
'*','.'
但是略微改变 - 主要做这道题的目的是为了能够熟悉DP的设计思路
- 设计状态转移方程
- B(i,j) :代表 s(1:i) 和 p(1:j) 是否匹配,返回布尔值
- 状态转移方程:
B(i,j)=⎧⎩⎨⎪⎪s[i−1]==p[j−1] && B(i−1,j−1)B(i−1,j) || B(i,j−1)B(i−1,j−1)if p[j−1]∈letterif p[j−1]==′∗′if p[j−1]==′?′
- 算法实现:
- 容易出现的问题:边界值问题
- 对于边界值的处理反复考虑推导可得:
vector<vector<bool>> boolMap(n+1, vector<bool>(m+1, false));
boolMap[0][0]=true;
for (int i=1; i<=m; i++){
if (p[i-1]=='*'){
boolMap[0][i]=boolMap[0][i-1];
}
}
- 具体代码可以查看原址
https://github.com/zhanzongyuan/leetcode/blob/master/044_Wildcard%20Matching.cpp