44. Wildcard Matching -- LeetCode
来源:互联网 发布:国密加密算法js 编辑:程序博客网 时间:2024/04/27 14:31
题目:
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
思路1 动态规划
class Solution {public: bool isMatch(string s, string p) { int m = s.size(), n = p.size(); vector<vector<bool>> dp(m + 1, vector<bool>(n + 1, false)); dp[0][0] = true; for(int i = 1; i <= m; i++) dp[i][0] = false; for(int j = 1; j <= n; j++) dp[0][j] = dp[0][j - 1] && p[j - 1] == '*'; 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] || dp[i - 1][j] || dp[i][j - 1]; else dp[i][j] = dp[i - 1][j - 1] && (s[i - 1] == p[j - 1] || p[j - 1] == '?') ; } return dp[m][n]; }};
思路2 回溯算法
当s[i] == p[j]时i++ j++
当p[j]=='*'时,用iStar和jStar记录当前的i,j
当p[j] != s[i] && p[j] != '?'时,回溯,j回溯到jstar+1,istar++;i=istar
最后就是简单的判断了
小节
思路2的算法思想较简单,但是用代码实现就要小心好多坑了,花了不少时间(看来目前写代码功力并不6啊)
Tips:对于不好理解的算法,可以用编辑器在每次循环将关键的变量打印出来(cout<<'i='<<i ... ...),帮助直观理解。( 抽象-》直观)
bool isMatch(string s, string p) { int slen = s.size(), plen = p.size(), i, j, iStar=-1, jStar=-1; for(i=0,j=0 ; i<slen; ++i, ++j) { if(p[j]=='*') { //meet a new '*', update traceback i/j info iStar = i; jStar = j; --i; } else { if(p[j]!=s[i] && p[j]!='?') { // mismatch happens if(iStar >=0) { // met a '*' before, then do traceback i = iStar++; j = jStar; } else return false; // otherwise fail } } } while(p[j]=='*') ++j; return j==plen; }
0 0
- LeetCode --- 44. Wildcard Matching
- [Leetcode] 44. Wildcard Matching
- Leetcode 44. Wildcard Matching
- leetcode 44. Wildcard Matching
- Leetcode 44. Wildcard Matching
- Leetcode:44. Wildcard Matching
- LeetCode 44. Wildcard Matching
- leetcode.44. Wildcard Matching
- LeetCode 44. Wildcard Matching
- Leetcode-44. Wildcard Matching
- [LeetCode] 44. Wildcard Matching
- [leetcode] 44. Wildcard Matching
- [LeetCode]--44. Wildcard Matching
- LeetCode 44. Wildcard Matching
- leetcode 44. Wildcard Matching
- LeetCode 44. Wildcard Matching
- 44. Wildcard Matching -- LeetCode
- LeetCode 44. Wildcard Matching
- seven—this关键字 static关键字 静态函数
- java笔记二 -- 类和对象 封装继承多态
- 流体力学
- Spring学习笔记 —— AOP(面向切面编程) 之使用ProxyFactoryBean实现AOP
- 面向对象
- 44. Wildcard Matching -- LeetCode
- python pexpect
- 简图记录-LINUX命令行基本使用
- 关于数据段,代码段,堆栈段,BSS段区别
- NIPS (神经信息处理系统进展大会)
- HTML中meta标签viewpoint的作用
- jquery技术初探-广告淡入淡出
- github 的创建及代码上传
- RPG游戏中造过的BUG