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; } }