思路:递归计算,关键在于多种情况的分析。
我将模式串的3种情况‘.’,‘字母相等’,‘字母不相等’分别讨论
每种情况分为两种子情况,模式串的后一位是' * '和不是' * '。
设置两个指针i,j表示str和Pattern的下标,还有一种特殊的情况当i==str.length时也可能返回true。
我将这种情况单独讨论了。
其实最好的分情况讨论就是讨论,模式串的下一位是否为‘*’。
public boolean match(char[] str, char[] pattern) { return help(str,pattern,0,0); } private boolean help(char[] str, char[] pattern, int i, int j) { if (i == str.length && j == pattern.length) return true; if(j>=pattern.length)return false; if (i == str.length&&j<pattern.length) { if((j + 1) < pattern.length && pattern[j + 1] == '*'){ return help(str,pattern,i,j+2); } return false; } if (pattern[j] == '.' && (j + 1) < pattern.length && pattern[j + 1] == '*') { return help(str, pattern, i, j+2)||help(str,pattern,++i,j); }else if (pattern[j] == '.'){ return help(str, pattern, ++i, ++j); } if (str[i] == pattern[j] && (j + 1) < pattern.length && pattern[j + 1] == '*') { return help(str, pattern, i, j + 2) || help(str, pattern, ++i, j); } else if (str[i] == pattern[j]) { return help(str, pattern, ++i, ++j); } if (str[i] != pattern[j] && (j + 1) < pattern.length && pattern[j + 1] == '*') { return help(str, pattern, i, j + 2); } else { return false; } }