题目描述
题目难度:Hard
Given an input string (s) and a pattern §, implement wildcard pattern matching with support for ‘?’ and ‘’.
‘?’ Matches any single character.
'’ Matches any sequence of characters (including the empty sequence).
The matching should cover the entire input string (not partial).
Note:
s could be empty and contains only lowercase letters a-z.
p could be empty and contains only lowercase letters a-z, and characters like ? or *.
- Example 1:
Input:
s = "aa"
p = "a"
Output: false
Explanation: “a” does not match the entire string “aa”. - Example 2:
Input:
s = "aa"
p = "*"
Output: true
Explanation: '’ matches any sequence.*
- Example 3:
Input:
s = "cb"
p = "?a"
Output: false
Explanation: ‘?’ matches ‘c’, but the second letter is ‘a’, which does not match ‘b’.
- Example 4:
Input:
s = "adceb"
p = "ab"
Output: true
Explanation: The first ‘’ matches the empty sequence, while the second '’ matches the substring “dce”.
- Example 5:
Input:
s = "acdcb"
p = "a*c?b"
Output: false
AC代码
class Solution {
public boolean isMatch(String ss, String pp) {
if (null==ss || null==pp) return true;
char s[] = ss.toCharArray();
char p[] = pp.toCharArray();
int i=0, j=0; //i 和 j 相当于分别是 s 和 p 的指针
int iIndex=-1, starIndex=-1; //iIndex : i 的索引,starIndex : 当前 * 开始的索引
while (i<s.length) {
if (j<p.length && (p[j]=='?' || s[i]==p[j])) {
i++;
j++;
} else if (j<p.length && p[j]=='*') {
iIndex = i;
starIndex = j;
j++; // point next char
} else if (starIndex!=-1) {
i=iIndex+1;
j=starIndex+1; // j keep to next char of "*"
iIndex++;
} else {
return false;
}
}
while (j<p.length && p[j]=='*') {
j++;
}
return j==p.length;
}
}