import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param pattern string字符串
* @return bool布尔型
*/
public boolean match(String str, String pattern) {
// write code here
char[] chs1 = str.toCharArray();
char[] chs2 = pattern.toCharArray();
boolean flag = fis(0, 0, chs1, chs2);
return flag;
}
public boolean fis(int i, int j, char[] chs1, char[] chs2) {
if (i == chs1.length && j == chs2.length) {
return true;
} else if (i == chs1.length || j == chs2.length) {
return false;
}
char ch1 = chs1[i];
char ch2 = chs2[j];
//匹配带*
if (j < chs2.length - 1 && chs2[j + 1] == '*') {
j += 2;
//一个都不匹配
if (fis(i, j, chs1, chs2)) {
return true;
}
i++;
while (i <= chs1.length) {
//匹配.*
if (ch2 == '.') {
if (fis(i, j, chs1, chs2)) {
return true;
}
i++;
//匹配n*a 和 a*
} else if (chs1[i - 1] == ch2) {
if (fis(i, j, chs1, chs2)) {
return true;
}
i++;
} else {
return false;
}
}
//匹配.或者a=a
} else if (ch2 == '.' || ch1 == ch2) {
if (fis(i + 1, j + 1, chs1, chs2)) {
return true;
//防止最后带*
} else if (j < chs2.length - 2 && chs2[j + 2] == '*') {
j += 2;
if (fis(i + 1, j + 1, chs1, chs2)) {
return true;
}
}
} else {
return false;
}
return false;
}
}