原题链接:https://leetcode.com/problems/wildcard-matching/
比较好的思路就是用DP,注意要先把第0行和第0列进行初始化。
注意在S 和 P中 i-1和j-1才代表当前循环中的字符。
AC 30ms :
class Solution {
public boolean isMatch(String s, String p) {
if(s==null||p==null)
return false;
int m=s.length(),n=p.length();
boolean[][] dp=new boolean[m+1][n+1];
dp[0][0]=true;
for(int j=1;j<=n;j++)
dp[0][j]=p.charAt(j-1)=='*'&&dp[0][j-1];
for(int i=1;i<=m;i++){
dp[i][0]=(p.length()>0)&&p.charAt(0)=='*'&&dp[i-1][0];
for(int j=1;j<=n;j++){
if(s.charAt(i-1)==p.charAt(j-1)||p.charAt(j-1)=='?')
dp[i][j]=dp[i-1][j-1];
else if(p.charAt(j-1)=='*')
dp[i][j]=dp[i-1][j]||dp[i][j-1];
else
dp[i][j]=false;
}
}
return dp[m][n];
}
}