leetcode: Wildcard Matching
来源:互联网 发布:保健品网络推广方案 编辑:程序博客网 时间:2024/06/03 04:26
动态规划,不过状态转换方程比较复杂
isMatch( a, b) = ((a.last = b.last || b.last == '?' ) && isMatch(a-1, b-1)) || ( b.last == '*' && ( isMatch(a-1, b) || isMatch(a, b-1) || isMatch(a-1, b-1))
也就是
if( p[i-1] == '*')
dp[j][i] = dp[j-1][i] || dp[j][i-1] || dp[j-1][i-1];
else if( p[i-1] == s[j-1] || p[i-1] == '?')
dp[j][i] = dp[j-1][i-1];
else
dp[j][i] = false;
class Solution {public: bool isMatch(const char *s, const char *p) { int s_len = strlen(s); int p_len = strlen(p); int cnt = 0; for( int i = 0; i < p_len; ++i){ if( *(p+i) != '*') ++cnt; } if( cnt > s_len) return false; bool dp[s_len+1][p_len+1]; memset(dp, false, sizeof(dp)); dp[0][0] = true; for( int i = 1; i <= p_len; ++i){ if( dp[0][i-1] && p[i-1] == '*') dp[0][i] = true; for( int j = 1; j <= s_len; ++j){ if( p[i-1] == '*') dp[j][i] = dp[j-1][i] || dp[j][i-1] || dp[j-1][i-1]; else if( p[i-1] == s[j-1] || p[i-1] == '?') dp[j][i] = dp[j-1][i-1]; else dp[j][i] = false; } } return dp[s_len][p_len]; }};
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
- TFS配置NameServer
- 黑马程序员_面向对象 封装、继承、多态
- 简单播放音乐
- 代理方法关键字Action与Fun的使用
- All factors of a given number
- leetcode: Wildcard Matching
- Build WebKit on Mac OS X 10.9
- RMI(远程方法调用)入门
- JSTL JSP页面判断某个cookie的值和读取值....
- oracle建表语句,id是自动增长,要完整的建表语句
- Error type 3 activity class{}does not exist 找不到文件
- Linux 账号管理与 ACL 权限配置
- error LNK2019:
- js css 实现简易计算器