String、動態規劃——正則表示式匹配
阿新 • • 發佈:2019-01-27
public class Solution { public boolean isMatch(String s, String p) { if(s == null||p == null) return false; boolean [][]flag=new boolean[100][100]; //flag[i][j]表示s.length == i and p.length == j 時匹配情況 //使用自底向上的方法 flag[0][0]=true; int m=s.length()+1; int n=p.length()+1; //s.length!=0,p.length == 0時,全部為false; for(int i=1;i<m;i++) { flag[i][0]=false; } //p.length!=0,s.length == 0時的情況。 for(int j=1;j<n;j++) { if(j>=2&&p.charAt(j-1) == '*')//去掉p.charAt(0) == '*'的情況; { flag[0][j]=flag[0][j-2]; }else { flag[0][j]=false; } } for(int i=1;i<m;i++) { for(int j=1;j<n;j++) { if(j>=2&&p.charAt(j-1) == '*')//去掉p.charAt(0) == '*'的情況; { if(p.charAt(j-2) == s.charAt(i-1)||p.charAt(j-2) == '.') { flag[i][j]=flag[i][j-2]||flag[i-1][j]||flag[i-1][j-2]; } else { flag[i][j]=flag[i][j-2]; } } else if(p.charAt(j-1) == s.charAt(i-1)||p.charAt(j-1) == '.') { flag[i][j]=flag[i-1][j-1]; } else { flag[i][j]=false; } } } return flag[m-1][n-1]; } }