44. 通配符匹配(困难)
题目描述:
给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。
‘?’ 可以匹配任何单个字符。
‘*’ 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。
说明:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。
考察重点:使用start记录出现位置,match记录匹配i中子串的终止位置。如‘aaaab’与‘a*b’:起始start=1,match=1,即*匹配空串,之后依次match=2,3,4。为4时,s[4]==p[2],循环终止。
public boolean isMatch(String s, String p) {int start = -1;int match = 0;int i = 0, j = 0;for(;i < s.length();){if (j < p.length() && (p.charAt(j) == '?' || s.charAt(i) == p.charAt(j))) {i++;j++;continue;} else if (j < p.length() && p.charAt(j) == '*') {start = j;match = i;j++;}else if(start != -1) {j = start + 1;match += 1;i = match;}elsereturn false;}for(;j < p.length();j ++){if(p.charAt(j) != '*')return false;}return true;}