LeetCode Wildcard Matching
来源:互联网 发布:android 电子书源码 编辑:程序博客网 时间:2024/06/10 15:36
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") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "*") → trueisMatch("aa", "a*") → trueisMatch("ab", "?*") → trueisMatch("aab", "c*a*b") → false
思路一:
代码如下:
class Solution {public: bool isMatch(string s, string p) { int sIndex=0,pIndex=0,match=0,starIdx=-1; while(sIndex < s.length()) { if(pIndex < p.length() && (p[pIndex] == '?' || p[pIndex] == s[sIndex])) { pIndex++; sIndex++; } else if(pIndex < p.length() && p[pIndex] == '*') { starIdx = pIndex; pIndex++; match = sIndex; } else if(starIdx!=-1) { pIndex = starIdx+1; match++; sIndex = match; } else return false; } while(pIndex<p.length() && p[pIndex] == '*') pIndex++; return pIndex == p.length(); }};
思路二:使用大杀器 -动态规划,列出动态方程如下:
if p[j-1] != '*', then dp[i][j] = dp[i-1][j-1] && (s[i-1] == p[j-1] || p[j-1] == '?')
if p[j-1] == '*', then dp[i][j] = dp[i-1][j] || dp[i][j-1]
需要注意的是dp方程组的初始化,dp[0][i](i=1,2,3...)根据p来进行,因为*可以代表空,所以当开头字串为*时,需要在dp[0][i]中相应位置设为true。 最后dp[0][0]设置为true
代码如下:
class Solution {public: bool isMatch(string s, string p) { int m = s.length(),n=p.length(); bool dp[m+1][n+1]; memset(dp,false,sizeof(bool)*(m+1)*(n+1)); dp[0][0] = true; for(int i=1;i<=n;i++) { if(p[i-1] == '*') dp[0][i] = true; else break; } for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) { if(p[j-1] != '*') dp[i][j] = dp[i-1][j-1] && (s[i-1] == p[j-1] || p[j-1] == '?'); else if(p[j-1] == '*') dp[i][j] = dp[i-1][j] || dp[i][j-1]; } return dp[m][n]; }};
0 0
- LeetCode: Wildcard Matching
- LeetCode : Wildcard Matching
- [LeetCode] Wildcard Matching - Iteratively
- leetcode 83: Wildcard Matching
- [Leetcode] Wildcard Matching
- [LeetCode]Wildcard Matching
- LeetCode-Wildcard Matching
- LeetCode -- Wildcard Matching
- LeetCode | Wildcard Matching
- Leetcode: Wildcard Matching
- Leetcode:Wildcard Matching
- LeetCode题解:Wildcard Matching
- LeetCode Wildcard Matching
- [Leetcode] Wildcard Matching (Java)
- LeetCode OJ:Wildcard Matching
- Leetcode: Wildcard Matching
- Wildcard Matching -- LeetCode
- [LeetCode] Wildcard Matching
- 紫狐云解析
- 领域驱动设计系列文章(1)——通过现实例子显示领域驱动设计的威力
- ubuntu中apt-get安装与默认路径
- java+xstream实现xml序列化(XStream轻松转换xml和java对象)
- Hibernate 映射实体Bean的关联关系
- LeetCode Wildcard Matching
- BOS项目中出现的错误以及解决方案
- eclipse 中安装spring tool suite 插件100%成功率
- Redis相关
- leetcode_middle_22_12. Integer to Roman
- 使用cryptography进行RSA加密
- MyBatis中多对多关系的映射和查询
- 网页访问IE8以下CLOSE浏览器
- mysql启动时报 Bind on unix socket Address already in use的问题处理