1.思想:动态规划
协助理解工具:https://alchemist-al.com/algorithms/regular-expression-matching
步骤:
正则表达式匹配:
思想:动态规划
核心:pattern匹配string
将pattern放在横行,string放在竖行
如果不是特殊字符,则两者不匹配直接false,两者匹配则按照对角线向斜上方推移。
如果是特殊字符‘.’,则按照对角线斜上方推移。
如果是特殊字符'*',当前两格为普通数,则以前两格为准。当前两格是‘.’,则以本列正上方为准(另外,前两格是本行对应字符,也以本行正上方为准)。
代码:
class Solution { public boolean isMatch(String s, String p) { boolean[][] table= new boolean[s.length()+1][p.length()+1]; table[0][0]=true; for(int col=1;col<table[0].length;col++){ char ch=p.charAt(col-1); if(col>1){ if(ch=='*'){ table[0][col]=table[0][col-2]; }else{ table[0][col]=false; } }else{ if(ch=='*') { table[0][col] = true; } } } for(int row=1;row<table.length;row++){ char ch1=s.charAt(row-1); for(int col=1;col<table[row].length;col++){ char ch2=p.charAt(col-1); if(ch1==ch2||ch2=='.'){ table[row][col]=table[row-1][col-1]; }else if (ch2=='*'){ if(col>1){ if(table[row][col-2]){ table[row][col]=true; }else{ char prev=p.charAt(col-2); if(prev==ch1||prev=='.'){ table[row][col]=table[row-1][col]; } } } } } } boolean lastRow[]=table[table.length-1]; return lastRow[lastRow.length-1]; } }