LeetCode.H10
题目:
题目大意:
正则表达式匹配。
数据范围:
如图所示
思路:
将“A*”看做一个整体。
代码:
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 ++ ){
for (int j = 1; j<= m; j ++ ){
if (j + 1 <= m && p.charAt(j + 1) == '*')continue;
if (i != 0 && p.charAt(j) != '*'){
f[i][j] = f[i - 1][j - 1] && (s.charAt(i) == p.charAt(j) || p.charAt(j) == '.');
}else if (p.charAt(j) == '*'){
f[i][j] = f[i][j - 2] || i != 0 && f[i - 1][j] && (s.charAt(i) == p.charAt(j - 1) || p.charAt(j - 1) == '.');
}
}
}
return f[n][m];
}
}
时空复杂度分析等:
-
时间复杂度 : O(n^2)
-
空间复杂度 : O(n^2)