Leetcode-44. Wildcard Matching
2016-06-12 17:13
363 查看
题目介绍
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
递归 (超时)
bool isMatch(string s, string p) { if(p.empty()){ return s.empty(); } if(p[0]=='*'){ int i=1; while(p[i]=='*'){ i++; } p = p.substr(i); if(p==""){ return true; } for(int j=0;j<s.length();j++){ if(isMatch(s.substr(j), p)){ return true; } } return false; }else{ return (p[0]=='?'|| p[0]==s[0])&& !s.empty()&&isMatch(s.substr(1),p.substr(1)); } }
DP
bool isMatch(string s, string p) { int m = s.length(),n=p.length(); vector<vector<bool>> d(m+1,vector<bool>(n+1,false)); d[0][0]=true; //Important //https://leetcode.com/discuss/54278/my-java-dp-solution-using-2d-table for(int i=1; i<=n; i++){ if(p[i-1] == '*') d[0][i] = d[0][i-1]; } //https://leetcode.com/discuss/43966/accepted-c-dp-solution-with-a-trick for(int j=1;j<=n;j++){ for(int i=1;i<=m;i++){ if(p[j-1] != '*'){ d[i][j] = (s[i-1] == p[j-1] || p[j-1] == '?') && d[i-1][j-1]; } else{ d[i][j] = d[i-1][j] || d[i][j-1]; } } } return d[m] ; }
相关文章推荐
- css 3d
- 函数节流(throttle)与函数去抖(debounce)
- Win2008 R2 WEB 服务器安全设置指南之禁用不必要的服务和关闭端口
- leetcode 29. Divide Two Integers
- 32个最重要的算法
- 常量接口模式
- Python下自定义函数的使用详解
- Mongo expireAfterSeconds 时间设置
- python中根据字符串调用函数的实现方法
- Android性能优化实战前篇
- JDK1.8 十大新特性详解
- Ubuntu 16.04 开机自动锁定数字键盘
- HTML的标签类型 以及通过CSS改变标签的显示类型
- SVG标记元素的使用
- linux 查看文件内容的命令
- java值传递与引用传递
- Linux重新生成启动引导文件
- Android 根据触摸状态切换背景,颜色,字体等状态
- linux C 多线程编程(互斥量)实例
- SVR4 和 4.3+BSD说明