010正則表示式匹配
阿新 • • 發佈:2020-08-09
寫在前面,太難了,目前還在思考,只是先把答案寫出來,等後面想完了再補上思考過程
一、java程式碼
/* * @lc app=leetcode.cn id=10 lang=java * * [10] 正則表示式匹配 */ // @lc code=start class Solution { public boolean isMatch(String s, String p) { //S串長度 //p串長度 int m=s.length(); int n=p.length(); boolean[][]f=new boolean[m+1][n+1]; f[0][0]=true; for(int i=0;i<=m;++i){ for(int j=1;j<=n;++j){ //判斷p串後面是否有*號,*讓p[j-2]重複0次 if(p.charAt(j-1)=='*'){ f[i][j]=f[i][j-2]; // if(matches(s,p,i,j-1)){ f[i][j]=f[i][j]||f[i-1][j]; } } else{ if(matches(s,p,i,j)){ f[i][j]=f[i-1][j-1]; } } } } return f[m][n]; } public boolean matches(String s,String p,int i,int j){ if (i==0){ return false; } if (p.charAt(j-1)=='.'){ return true; } return s.charAt(i-1)==p.charAt(j-1); } } // @lc code=end
二、圖解過程
2.1
2.2
2.3
2.4
2.5
2.6
2.7