[LeetCode] 10. 正则表达式匹配(java实现)动态规划
1. 题目
2. 读题(需要重点注意的东西)
思路:
注意:*
表示前面的那个元素有任意个(可以是0个),·
表示任意一个元素
优化方式类似于完全背包问题,如下所示
3. 解法
---------------------------------------------------解法---------------------------------------------------:
class Solution {
public boolean isMatch(String s, String p) {
int n = s.length(),m = p.length();
s = " " + s;
p = " " + p;
boolean[][] f = new boolean[n + 1][m + 1];
f[0][0] = true;
for(int i = 0;i <= n;i ++)
// p串不能为0,所以从1开始
for(int j = 1;j <= m;j ++)
{
if(j + 1 <= m && p.charAt(j + 1) == '*') continue;// 把*和前面的字符看为一个整体
if(p.charAt(j) != '*')
f[i][j] = i != 0 && f[i - 1][j - 1] && ((p.charAt(j) == s.charAt(i)) || (p.charAt(j) == '.'));
else
f[i][j] = f[i][j - 2] || (i != 0 && f[i - 1][j] && ((p.charAt(j - 1) == s.charAt(i)) || (p.charAt(j - 1) == '.')));
}
return f[n][m];
}
}
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
- 动态规划