package sort;
public class Test19 {
public static void main(String[] args) {
String s = "aaa";
String p = "ab*aa";
System.out.println(Match(s.toCharArray(), 0, p.toCharArray(), 0));
}
public static boolean Match(char[] stchar, int a, char[] patternchar, int b) {
if (a == stchar.length && b == patternchar.length) {
return true;// 表示两字符串同时结束,匹配成功
}
if ((stchar.length != a && patternchar.length == b)
|| (stchar.length == a && patternchar.length != b))
return false;// 表示俩字符串没有同时结束,匹配失败
if (b + 1 < patternchar.length && patternchar[b + 1] == '*') {// 表示正在匹配的模式字符串后一位是*,
if (a != stchar.length // 所以正在匹配的字符可以有多种情况
&& (patternchar[b] == stchar[a] || patternchar[b] == '.')) {
return Match(stchar, a, patternchar, b + 2) // pattern中x*,在目标字符串中没有出现
|| Match(stchar, a + 1, patternchar, b + 2) // pattern中x*在目标字符串中出现1次
|| Match(stchar, a + 1, patternchar, b); // pattern中x*在目标字符串中出现多次
} else {
return Match(stchar, a, patternchar, b + 2); //
}
}
if (a != stchar.length // 表示下一位不是*,则按顺序一位一位匹配
&& (patternchar[b] == stchar[a] || patternchar[b] == '.'))
return Match(stchar, a + 1, patternchar, b + 1);
return false;//如果有一位匹配失败则匹配到此结束
}
}