字符串通配

题目:对于字符串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];
    }
原文地址:https://www.cnblogs.com/team42/p/6736724.html