正则表达式匹配
给你一个字符串 s
和一个字符规律 p
,请你来实现一个支持 '.'
和 '*'
的正则表达式匹配。
'.'
匹配任意单个字符'*'
匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s
的,而不是部分字符串。
public static boolean isMatch(String s, String p) {
int m = s.length();
int n = p.length();
boolean[][] dp = new boolean[m + 1][n + 1];
dp[0][0] = true;
for (int i = 0; i < m; i++){
for(int j = 0; j < n ; j++){
if('.' == p.charAt(j) || p.charAt(j) == s.charAt(i)){
dp[i + 1][j + 1] = dp[i][j];
}
if('*' == p.charAt(j)){
if('.' != p.charAt(j - 1) && p.charAt(j - 1) != s.charAt(i)){
dp[i + 1][j + 1] = dp[i + 1][j - 1];
}else {
dp[i + 1][j + 1] = dp[i + 1][j - 1] || dp[i + 1][j] || dp[i][j + 1];
}
}
}
}
return dp[m][n];
}