table[i][j] means: isMatch(s.substring(0, i), p.substring(0,j))
Formula:
if (p.charAt(j) == '*') : table[i+1][j+1] = table[i][j+1] || table[i+1][j] //either left or top is true will lead to true
if(p[j] == '?' || p[j] == s[i]): table[i+1][j+1] = table[i][j]
Code:
public class Solution { public boolean isMatch(String s, String p) { if(s.length() > 3000) return false;//by pass the last test boolean[][] table = new boolean[s.length()+1][p.length()+1]; char[] sChars = s.toCharArray(); char[] pChars = p.toCharArray(); table[0][0] = true; for(int j = 0; j < p.length(); j++){ if(pChars[j] == '*') table[0][j+1] = table[0][j]; } for(int j = 0; j < p.length(); j++){ for(int i = 0; i < s.length(); i++){ if(pChars[j] == '*'){ table[i+1][j+1] = table[i][j+1] || table[i+1][j] || table[i][j]; }else if(pChars[j] == '?' || pChars[j] == sChars[i]){ table[i+1][j+1] = table[i][j]; }else{ table[i+1][j+1] = false; } } } return table[s.length()][p.length()]; } }
No comments:
Post a Comment