[LeetCode] 44. Wildcard Matching 外卡匹配
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). The function prototype should be: bool isMatch(const char *s, const char *p) Some examples: isMatch("aa","a") → false isMatch("aa","aa") → true isMatch("aaa","aa") → false isMatch("aa", "*") → true isMatch("aa", "a*") → true isMatch("ab", "?*") → true isMatch("aab", "c*a*b") → false
通配符匹配问题,和10. Regular Expression Matching 类似。'?'匹配1个字符,'*'匹配任何字符序列,包括空的。有贪心Greedy, 动态规划DP解法。
Java: Greedy, Iteration
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class WildcardMatching { public boolean isMatch(String s, String p) { int i = 0 ; int j = 0 ; int star = - 1 ; int mark = - 1 ; while (i < s.length()) { if (j < p.length() && (p.charAt(j) == '?' || p.charAt(j) == s.charAt(i))) { ++i; ++j; } else if (j < p.length() && p.charAt(j) == '*' ) { star = j; j++; mark = i; //这一步是关键,匹配s中当前字符与p中‘*’后面的字符,如果匹配,则在第一个if中处理,如果不匹配,则继续比较s中的下一个字符。 } else if (star != - 1 ) { j = star + 1 ; i = ++mark; } else { return false ; } } //最后在此处处理多余的‘*’,因为多个‘*’和一个‘*’意义相同。 while (j < p.length() && p.charAt(j) == '*' ) { ++j; } return j == p.length(); } } |
Python: Greedy, Iteration
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Solution: def isMatch( self , s, p): p_ptr, s_ptr, last_s_ptr, last_p_ptr = 0 , 0 , - 1 , - 1 while s_ptr < len (s): if p_ptr < len (p) and (s[s_ptr] = = p[p_ptr] or p[p_ptr] = = '?' ): s_ptr + = 1 p_ptr + = 1 elif p_ptr < len (p) and p[p_ptr] = = '*' : p_ptr + = 1 last_s_ptr = s_ptr last_p_ptr = p_ptr elif last_p_ptr ! = - 1 : last_s_ptr + = 1 s_ptr = last_s_ptr p_ptr = last_p_ptr else : return False while p_ptr < len (p) and p[p_ptr] = = '*' : p_ptr + = 1 return p_ptr = = len (p) |
类似题目:
[LeetCode] 10. Regular Expression Matching 正则表达式匹配
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构