题目
分析
递归版本,分为三个部分进行操作
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次