题目:对于字符串A,其中绝对不含有字符’.’和’*’。再给定字符串B,其中可以含有’.’或’*’,’*’字符不能是B的首字符,并且任意两个’*’字符不相邻。exp中的’.’代表任何一个字符,B中的’*’表示’*’的前一个字符可以有0个或者多个。请写一个函数,判断A是否能被B匹配。"abcd",4,".*",2返回:true
思路:不用api而用dp,dp[i][j]代表A中的1~i位可以匹配B中的1~j位,‘*’可以匹配前一位任意次数,dp[i][j]=d[i-
1
][j] || d[i][j -
1
]
‘.’匹配任意字符一次,dp[i][j]=dp[i-1][j-1];其他情况就必须A[i-1]和B[j-1]一样了
public boolean chkWildMatch(String A, int lena, String B, int lenb) {
boolean[][] dp = new boolean[lena+1][lenb+1];
//dp[i][j]代表A中的1到i位可以匹配B中1到i位
dp[0][0]=true;
for(int i=1;i<=lena;i++){
for(int j=1;j<=lenb;j++){
if(B.charAt(j-1)=='*'){
dp[i][j]=dp[i-1][j]||dp[i][j-1];
}else if(B.charAt(j-1)=='.'){
dp[i][j]=dp[i-1][j-1];
}else{
dp[i][j]=dp[i-1][j-1]&&(A.charAt(i-1)==B.charAt(j-1));
}
}
}
return dp[lena][lenb];
}