44. Wildcard Matching(通配符匹配)
2017-10-23 00:33
309 查看
44. Wildcard Matching(通配符匹配)
Wildcard Matching通配符匹配题目链接
题目描述
题目分析
方法贪心
算法描述
参考代码
题目链接
https://leetcode.com/problems/wildcard-matching/description/题目描述
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
题目分析
这道题目中只有两种通配符,所以并不算是太复杂。?只能匹配1个字符,基本没有什么问题。主要的问题在于
*匹配多长的串合适。经过分析,可以发现:必须让每个
*匹配尽量短的字符串。试想,若
*匹配的串过长,例如
"zacabaz"和
"*ac*"匹配,第1个
*只能匹配一个
z,否则会得到不能匹配。
方法:贪心
算法描述
设待匹配的字符串为S,表达式为
P。
i为
S的下标,
j为
P的下标。
wildcard为最后一次出现的
*下标。
1. 若
S[i]可以和
P[i]匹配(
S[i] == P[i]或
P[i] == '?'),
i和
j都加
1
2. 若
P[i] == '*',
wildcard指向
j所指向的位置,
i和
j都加
1
3. 若
S[i]无法和
P[i]匹配,则必须用
*匹配到此位置。
j = wildcard + 1,
i++
参考代码
class Solution { public: bool isMatch(string s, string p) { string temp; for (int i = 0; i < p.size(); i++) { if (p[i] == '*' && i > 0 && p[i - 1] == '*') continue; temp.push_back(p[i]); } p = temp; int i = 0, j = 0, wildcard = -1, match; while (i < s.size()) { if (j < p.size() && p[j] == '*') { match = i; wildcard = j++; } else if (j < p.size() && (s[i] == p[j] || p[j] == '?')) { i++; j++; } else if (wildcard >= 0) { i = ++match; j = wildcard + 1; } else return false; } if (j < p.size() && p[j] == '*') j++; ret 8d16 urn j == p.size(); } };
相关文章推荐
- Leet Code 44 Wildcard Matching - 通配符匹配 - Java
- leetcode-44 Wildcard Matching 通配符匹配
- leetCode 44.Wildcard Matching (通配符匹配) 解题思路和方法
- LeetCode 44. Wildcard Matching(通配符匹配)
- (Java) LeetCode 44. Wildcard Matching —— 通配符匹配
- [LeetCode]Wildcard Matching 通配符匹配(贪心)
- leetcode Wildcard Matching ,Regular Expression Matching (正则表达式匹配和通配符匹配)
- Wildcard Matching 通配符匹配
- [Lintcode]Wildcard Matching 通配符匹配
- LeetCode 44. Wildcard Matching(模糊匹配)
- [LeetCode] 44. Wildcard Matching 外卡匹配
- [LeetCode]Wildcard Matching 通配符匹配(贪心)
- [leetcode] Wildcard Matching 通配符匹配
- [置顶] 通配符匹配(Wildcard Matching)与正则表达式匹配(Regular Expression Matching)解法解析
- LeetCode: Wildcard Matching (通配符匹配)
- [LeetCode] Wildcard Matching 通配符匹配
- [置顶] 通配符匹配(Wildcard Matching)与正则表达式匹配(Regular Expression Matching)解法解析
- [置顶] 通配符匹配(Wildcard Matching)与正则表达式匹配(Regular Expression Matching)解法解析
- LeetCode-Wildcard Matching-通配符匹配-DP
- [置顶] 通配符匹配(Wildcard Matching)与正则表达式匹配(Regular Expression Matching)解法解析