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

京公网安备 11010502036488号