题目描述
题目难度: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;
}
}
通配符匹配算法解析
本文深入探讨了通配符匹配算法,详细解释了如何在输入字符串中使用‘?’和‘*’进行模式匹配,提供了具体示例并附带AC代码实现。
177

被折叠的 条评论
为什么被折叠?



