剑指offer面试题19 正则表达式匹配

版权声明:原创文章,转载需注明转载出处! https://blog.csdn.net/zhoumingsong123/article/details/82015658
public class Solution {
    public boolean match(char[] str, char[] pattern) {

        int i = 0;
        int j = 0;
        String str1 = String.valueOf(str);
        String pattern1 = String.valueOf(pattern);
        return huishu(i, j, str1, pattern1);

    }

    public boolean huishu(int i, int j, String str1, String pattern1) {
        if (i == str1.length() && j == pattern1.length()) {
            return true;
        }


        if (j == pattern1.length() && i < str1.length()) {
            return false;
        }


        if (((j + 1) < pattern1.length())) {



            if (pattern1.charAt(j + 1) != '*') {

                if (i<str1.length()&&((str1.charAt(i) == pattern1.charAt(j) || pattern1.charAt(j) == '.'))) {
                    return huishu(i + 1, j + 1, str1, pattern1);
                } else {
                    return false;
                }
            } else {

//                    boolean flag=huishu(i,j+2,str1,pattern1);
//
//                    if(flag)
//                    {
//                        return true;
//                    }
//                    else
//                    {
//                        if((str1.charAt(i)==pattern1.charAt(j)||pattern1.charAt(j)=='.'))
//                        {
//
//                        }
//                        else
//                        {
//                            return false;//----------------------------this is error   ba*b 与 bb是匹配的,不能返回false
//
//                        }
//                        return huishu(i+1,j,str1,pattern1);
//                    }


                if (i<str1.length()&&((str1.charAt(i) == pattern1.charAt(j) || pattern1.charAt(j) == '.'))) {
                    return huishu(i, j + 2, str1, pattern1) || huishu(i + 1, j, str1, pattern1);
                } else {
                    return huishu(i, j + 2, str1, pattern1);
                }


            }


        } else {
            if (i<str1.length()&&((str1.charAt(i) == pattern1.charAt(j) || pattern1.charAt(j) == '.'))) {
                return huishu(i + 1, j + 1, str1, pattern1);
            } else {
                return false;
            }
        }





    }

    public static void main(String[] args) {
        Solution solution = new Solution();

        char str[] = {'a', 'b'};
        char pattern[] = {'.', '*'};
        System.out.println(solution.match(str, pattern));
    }
}

猜你喜欢

转载自blog.csdn.net/zhoumingsong123/article/details/82015658