思路:
“.”就很简单了,如果模式的字符是"." 那么就默认相等。
当模式中的第二个字符是“ * ”时:
如果字符串第一个字符跟模式第一个字符不匹配,则模式后移2个字符,继续匹配。
如果字符串第一个字符跟模式第一个字符匹配,可以有3种匹配方式:
1.模式后移2字符,相当于x* 被忽略,相等于x出现0次
例如:字符串:aaa, 模式:ab * aa,第一个字符已经匹配,现在匹配第二个字符,现在发现模式的第三个字符是 " * ", 此时我们直接忽略b*的存在,现在匹配字符串的第二个字符和模式的第四个字符,相等,一直匹配结束都相等。所以匹配。
2.字符串后移1字符,模式后移2字符,相当于x*匹配一位,*号之前的字符出现了一次。
例如:字符串:aba,模式ab * a,现在匹配第二个字符时发现,模式的第三个字符是 * ,现在比对的结果是第二个字符相等,所以字符串向后移动1位,模式向后移动两位。
3.字符串后移1字符,模式不变,即继续匹配字符下一位,相当于x* 匹配多位,也就是x出现了多次。
例如:字符串:abbba,模式:ab* a, 此时第二个字符相等,模式的第三个字符是 * ,字符串直接后移,再接着判断,这时,我们默认模式中的b出现了多次。
当模式中的第二个字符不是“*”时:
如果字符串第一个字符和模式中的第一个字符相匹配,那么字符串和模式都后移一个字符,然后匹配剩余的部分。
如果字符串第一个字符和模式中的第一个字符相不匹配,直接返回False。
代码:
public static boolean match(char[] str, char[] pattern) {
if (pattern