JZ52 正则表达式匹配
原题链接
描述
请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。
示例
输入:"aaa","a*a"
返回值:true
思路
动态规划可太难了。
解答
public class Solution {
public boolean match(String str, String pattern) {
int m = str.length() + 1;
int n = pattern.length() + 1;
boolean[][] dp = new boolean[m][n];
// 初始化
dp[0][0] = true;
for (int j = 2; j < n; j += 2)
dp[0][j] = dp[0][j - 2] && pattern.charAt(j - 1) == '*';
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (pattern.charAt(j - 1) == '*') {
dp[i][j] = dp[i][j - 2] ||
dp[i - 1][j] && (str.charAt(i - 1) == pattern.charAt(j - 2) ||
pattern.charAt(j - 2) == '.');
} else {
dp[i][j] = dp[i - 1][j - 1] &&
(pattern.charAt(j - 1) == '.' ||
str.charAt(i - 1) == pattern.charAt(j - 1));
}
}
}
return dp[m - 1][n - 1];
}
}
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15225363.html