My java DP solution using 2D table
public class Solution {\n        public boolean isMatch(String s, String p) {\n            boolean[][] match=new boolean[s.length()+1][p.length()+1];\n         
    public class Solution {\n        public boolean isMatch(String s, String p) {\n            boolean[][] match=new boolean[s.length()+1][p.length()+1];\n            match[s.length()][p.length()]=true;\n            for(int i=p.length()-1;i>=0;i--){\n                if(p.charAt(i)!='*')\n                    break;\n                else\n                    match[s.length()][i]=true;\n            }\n            for(int i=s.length()-1;i>=0;i--){\n                for(int j=p.length()-1;j>=0;j--){\n                    if(s.charAt(i)==p.charAt(j)||p.charAt(j)=='?')\n                            match[i][j]=match[i+1][j+1];\n                    else if(p.charAt(j)=='*')\n                            match[i][j]=match[i+1][j]||match[i][j+1];\n                    else\n                        match[i][j]=false;\n                }\n            }\n            return match[0][0];\n        }\n    }
['Dynamic Programming', 'Java']