[Lintcode]Wildcard Matching 通配符匹配
来源:互联网 发布:软件 渠道分销 提成 编辑:程序博客网 时间:2024/05/14 16:03
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).
Example
分析:Hulu面试时遇到过类似的正则表达式匹配题目,比这道题稍难,除了 '?' , '*', 应该还有'.'isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "*") → trueisMatch("aa", "a*") → trueisMatch("ab", "?*") → trueisMatch("aab", "c*a*b") → false
二维动态规划。res[i][j]代表s第0~i个字符是否和p第0~j个字符匹配。注意初始时考虑s,p首字符为*的情况。
遇到问号时,res[i][j] = res[i - 1][j - 1] 遇到星号时,res[i][j] = res[i - 1][k] k from 1 to j - 1.假设星号在s上。即s字符串除去星号后的0~星号前一位组成的字符串,去和p字符串j位置之前的所有字符串匹配,如果有匹配成功的,那么说明星号可以代替两个字符串之间相差的字符串。 那么res[i][j] = true. 本来考虑k的范围从i - 1到j-1,但是这种情况忽略了星号前边还有星号的情况。所以需要从1开始。或者引入临时变量,记录有效字符的数量,然后从这个数字开始执行for。
public class Solution { /** * @param s: A string * @param p: A string includes "?" and "*" * @return: A boolean */ public boolean isMatch(String s, String p) { boolean[][] res = new boolean[s.length() + 1][p.length() + 1]; res[0][0] = true; if(s.length() != 0 && s.charAt(0) == '*') { for(int i = 0; i <= p.length(); i++) { res[1][i] = true; } } if(p.length() != 0 && p.charAt(0) == '*') { for(int i = 0; i <= s.length(); i++) { res[i][1] = true; } } for(int i = 1; i <= s.length(); i++) { for(int j = 1; j <= p.length(); j++) { if((s.charAt(i - 1) == p.charAt(j - 1)) || (s.charAt(i - 1) == '?') || (p.charAt(j - 1) == '?')) { res[i][j] = res[i - 1][j - 1]; } else if(s.charAt(i - 1) == '*') { for(int k = 1; k <= j; k++) { if(res[i - 1][k]) { res[i][j] = true; break; } } } else if(p.charAt(j - 1) == '*') { for(int k = 1; k <= i; k++) { if(res[k][j - 1]) { res[i][j] = true; break; } } } else { res[i][j] = false; } } } return res[s.length()][p.length()]; }}
阅读全文
0 0
- [Lintcode]Wildcard Matching 通配符匹配
- Wildcard Matching 通配符匹配
- Wildcard Matching 通配符匹配
- Wildcard Matching 通配符匹配
- Wildcard Matching:通配符匹配
- LeetCode: Wildcard Matching (通配符匹配)
- 通配符匹配字符串 Wildcard Matching
- [leetcode] Wildcard Matching 通配符匹配
- [LeeCode]—Wildcard Matching 通配符匹配问题
- [LeetCode]Wildcard Matching 通配符匹配(贪心)
- leetcode-44 Wildcard Matching 通配符匹配
- 44. Wildcard Matching(通配符匹配)
- LeetCode OJ 之 Wildcard Matching(通配符匹配)
- leetCode 44.Wildcard Matching (通配符匹配) 解题思路和方法
- Leetcode #44. Wildcard Matching 通配符匹配 解题报告
- String、动态规划——wildcard-matching 通配符匹配
- lintcode:Wildcard Matching
- LintCode 192:Wildcard Matching
- STL之配接器
- SQL中的借书经典案例
- 概率论——随机变量的数字特征
- MFC的映射方式MM_ANISOTROPIC
- node.js使用(六):express框架的安装
- [Lintcode]Wildcard Matching 通配符匹配
- TensorFlow学习日记3
- SpringBoot 配置log4j2日志输出
- [51nod1227]平均最小公倍数(莫比乌斯反演+杜教筛)
- 谈谈Android开发与女娲造人
- Error creating Django application: Error on python side. Exit code: 1的解决办法
- 【C语言】扫雷游戏基础
- 再学莫比乌斯反演
- 他人之言01