题目

分析

递归版本,分为三个部分进行操作

base case

当match字符串走到头的时候,这个时候就看被匹配是否走到了头

不带有*的过程

其中需要注意的过程有,如果这个时候匹配的走到了头,这个特殊情况

带有*的过程

从c*匹配0个字符开始

代码

package com.ccy.test;

public class Test38 {

    public static boolean isMatch(String s, String p) {
        char[] sc = s.toCharArray();
        char[] pc = p.toCharArray();
        boolean f = f(sc, pc, 0, 0);
        return f;
    }

    public static boolean f(char[] s, char[] p, int si, int pi) {
        //base case
        if (pi == p.length) {
            return si==s.length;
        }
        if(si==s.length&&pi+1!=p.length&&p[pi+1]=='*') return true;
        if(si==s.length&&pi!=p.length) return false;
        if (pi == p.length - 1 || p[pi + 1] != '*') {
            if (s[si] == p[pi] || p[pi] == '.') {
                return f(s, p, si + 1, pi + 1);
            } else {
                return false;
            }
        }
        while (si != s.length && (s[si] == p[pi] || p[pi] == '.')) {
            if (f(s, p, si, pi + 2)) {
                return true;
            }
            si++;
        }
        return f(s, p, si, pi + 2);
    }

    public static void main(String[] args) {
        String s = "a";
        String p = "ab*";
        System.out.println(isMatch(s, p));
    }

}

学习过程

1次