leetcode每日一题 10
public static boolean isMatch(String s, String p) {
if(s==null||p==null) return false;
boolean dp[][]=new boolean [s.length()+1][p.length()+1];
dp[0][0]=true;
for (int i = 0; i < p.length(); i++) {//预处理
if (p.charAt(i)=='*'&&dp[0][i-1]) {
dp[0][i+1]=true;
}//s = "aab" p = "c*a*b" 输出: true i=1 dp[0][i+1]=true 即s="" p="c*"=""=s
}
for (int i = 0; i < s.length(); i++) {
for (int j = 0; j < p.length(); j++) {
if (p.charAt(j)==s.charAt(i)) {//s="ab" p="ab"
dp[i+1][j+1]=dp[i][j];
}
if (p.charAt(j)=='.') {
dp[i+1][j+1]=dp[i][j]; //s="ab" p=".b"
}
if (p.charAt(j)=='*') {
if (p.charAt(j-1)!=s.charAt(i)&&p.charAt(j-1)!='.') {
dp[i+1][j+1]=dp[i+1][j-1];
}else {
dp[i+1][j+1]=dp[i+1][j]||dp[i][j+1]||dp[i+1][j-1];
}
}
}
}
return dp[s.length()][p.length()];
}
public static boolean isMatch(String s, String p) {
if(s==null||p==null) return false;
boolean dp[][]=new boolean [s.length()+1][p.length()+1];
dp[0][0]=true;
for (int i = 0; i < p.length(); i++) {//预处理
if (p.charAt(i)=='*'&&dp[0][i-1]) {
dp[0][i+1]=true;
}//s = "aab" p = "c*a*b" 输出: true i=1 dp[0][i+1]=true 即s="" p="c*"=""=s
}
for (int i = 0; i < s.length(); i++) {
for (int j = 0; j < p.length(); j++) {
if (p.charAt(j)==s.charAt(i)) {//s="ab" p="ab"
dp[i+1][j+1]=dp[i][j];
}
if (p.charAt(j)=='.') {
dp[i+1][j+1]=dp[i][j]; //s="ab" p=".b"
}
if (p.charAt(j)=='*') {
if (p.charAt(j-1)!=s.charAt(i)&&p.charAt(j-1)!='.') {
dp[i+1][j+1]=dp[i+1][j-1];
}else {
dp[i+1][j+1]=dp[i+1][j]||dp[i][j+1]||dp[i+1][j-1];
}
}
}
}
return dp[s.length()][p.length()];
}
全部评论
相关推荐
点赞 评论 收藏
分享