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;
}else
return false;
}
for(;j < p.length();j ++){
if(p.charAt(j) != '*')
return false;
}
return true;
}