题解 | #正则表达式匹配#
正则表达式匹配
https://www.nowcoder.com/practice/28970c15befb4ff3a264189087b99ad4
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param str string字符串 * @param pattern string字符串 * @return bool布尔型 */ public boolean match (String str, String pattern) { // write code here // 状态定义dp[i][j]:表示str前i个字符和pattern前j个字符是否匹配 boolean dp[][] = new boolean[str.length() + 1][pattern.length() + 1]; // 遍历str每个长度 for(int i = 0;i <= str.length();i++){ // 遍历pattern每个长度 for(int j = 0;j <= pattern.length();j++){ // 空正则场景 if(j == 0){ dp[i][j] = (i == 0?true:false); }else{ if(pattern.charAt(j - 1) != '*'){ if(i > 0 && (str.charAt(i - 1) == pattern.charAt(j - 1) || pattern.charAt(j - 1) == '.')){ dp[i][j] = dp[i - 1][j - 1]; } }else{ if(j >= 2){ dp[i][j] |= dp[i][j - 2]; } if(i >= 1 && j >= 2 && (str.charAt(i -1) == pattern.charAt(j - 2) || pattern.charAt(j - 2) == '.')){ dp[i][j] |= dp[i - 1][j]; } } } } } return dp[str.length()][pattern.length()]; } }