字符串通配
题目:对于字符串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]; }