String、动态规划——wildcard-matching 通配符匹配
来源:互联网 发布:pubmed数据库手机版 编辑:程序博客网 时间:2024/05/29 04:50
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
递归代码运行超时,但在eclipse上自己测试了几个用例能通过:
public class Solution { public boolean isMatch(String s, String p) { if(s == null||p == null) return false; return matchCore(s,0,p,0); } public boolean matchCore(String s,int sindex,String p,int pindex) { //边界条件 if(sindex == s.length()&&pindex == p.length())//都到达末尾时返回true return true; else if(pindex == p.length())//p到达末尾而s没有,则返回false; return false; else if(sindex ==s.length())//s到达末尾,p余下的全部为‘*’返回true,否则返回false; { if(p.charAt(pindex) == '*') { return matchCore(s,sindex,p,pindex+1); }else { return false; } } //一般条件 if(s.charAt(sindex) == p.charAt(pindex)||p.charAt(pindex) == '?') { return matchCore(s,sindex+1,p,pindex+1); } else if(p.charAt(pindex) == '*')//当前字符为'*'时的情况; { return matchCore(s,sindex+1,p,pindex+1)|| matchCore(s,sindex,p,pindex+1)|| matchCore(s,sindex+1,p,pindex); } else { return false; } }}
动态规划:用空间换时间。运行时间130ms,占用内存5000K。
public class Solution { public boolean isMatch(String s, String p) { if(s == null|| p == null) return false; int m=s.length()+1; int n=p.length()+1; //flag[i][j]表示s.length() == i,p.length()== j时匹配状况; boolean [][]flag=new boolean [m][n]; //边界情况: //s.length和p.length为0时 返回true; flag[0][0]=true; //p.length为0,s.length不为0时返回false; for(int i=1;i<m;i++) { flag[i][0]=false; } //s.length为0,p.length不为0,只有当p其余全为'*'时,返回true,否则返回false; for(int j=1;j<n;j++) { if(p.charAt(j-1) == '*') { flag[0][j]=flag[0][j-1]; }else { flag[0][j]=false; } } //一般情况: for(int i=1;i<m;i++) { for(int j=1;j<n;j++) { if(s.charAt(i-1) == p.charAt(j-1)||p.charAt(j-1) == '?') { flag[i][j]=flag[i-1][j-1]; } else if(p.charAt(j-1) == '*') { flag[i][j]=flag[i-1][j]||flag[i-1][j-1]||flag[i][j-1]; } else { flag[i][j]=false; } } } return flag[m-1][n-1]; }}
1 0
- String、动态规划——wildcard-matching 通配符匹配
- [LeeCode]—Wildcard Matching 通配符匹配问题
- Wildcard Matching 通配符匹配
- Wildcard Matching 通配符匹配
- Wildcard Matching 通配符匹配
- Wildcard Matching:通配符匹配
- 【LeetCode】Wildcard Matching 串匹配 动态规划
- LeetCode: Wildcard Matching (通配符匹配)
- 通配符匹配字符串 Wildcard Matching
- [leetcode] Wildcard Matching 通配符匹配
- [Lintcode]Wildcard Matching 通配符匹配
- 动态规划 —— 求解通配符问题(wildcard)
- [LeetCode]Wildcard Matching 通配符匹配(贪心)
- leetcode-44 Wildcard Matching 通配符匹配
- 44. Wildcard Matching(通配符匹配)
- 动态规划——通配符匹配算法
- LeetCode OJ 之 Wildcard Matching(通配符匹配)
- leetCode 44.Wildcard Matching (通配符匹配) 解题思路和方法
- jQuery学习和知识点总结归纳
- android studio配置
- 如何查看Linux是32位还是64位(转)
- 人工智能过去60年沉浮史,未来60年将彻底改变人类
- 正则表达式学习笔记(4) 贪婪、惰性和支配量词
- String、动态规划——wildcard-matching 通配符匹配
- RecycleView实现侧滑和拖动
- 将服务器部署在腾讯云遇到的一些事
- MIPI LCD调试总结
- 并查集(小米面试题求朋友圈的个数)
- C++实现K-means,聚类原理解析(并用在图片像素点聚类)
- 灰帽子python 读书笔记 2
- C语言获取文件长度及全部内容
- Android Property System | Android属性系统