[LeetCode] 44. Wildcard Matching
来源:互联网 发布:淘宝上找相似 编辑:程序博客网 时间:2024/04/27 14:41
思路:
这题好难啊, 面试遇到就跪了. 一开始只想到了DP的思路, 但时间太慢过不去大样本, 最后discuss看了这个大神的贪心算法https://discuss.leetcode.com/topic/3040/linear-runtime-and-constant-space-solution, 通过了.
主要是用两个指针分别追踪两个字符串s和p. 如果两个s[ps]和p[pp]相同或者p[pp]是’?’的话就直接两边自加加去看下一组, 如果不是的话进第二个if条件, 那就是看当前p[pp]是不是’*’, 如果是星号, 就也没问题, 要把星号的坐标和当前ps的值都保存下来, 因为如果后面出现了匹配不上的情况后要返回来. 然后如果这个字符也不是星号, 就要像刚才说的返回到上一个星号的位置asterisk和s的lastMatch的位置进行匹配, 这里等于就是在用星号匹配字符, 直到下一个星号出现或者下一个相同字符对出现为止. 如果这里发现asterisk == -1, 那么就说明之前没有星号, 那这里就肯定无法继续匹配了, 返回假即可.
如果while循环结束了以后, 就是说明s已经遍历完了, 但不要着急, p不一定遍历完了, 如果这时候p后面还有除了星号的其他字符, 那依然失败, 所以我们再移动pp的位置, 如果没有其他字符了, pp最终的值会为p的长度值, 所以我们最终返回那个判断式.
bool isMatch(string s, string p) { int ps = 0, pp = 0, lastMatch = 0, asterisk = -1; while (ps < s.length()) { // s, p当前两个字符匹配 if (s[ps] == p[pp] || p[pp] == '?') ps++, pp++; // p的字符是星号, 记录位置, 挪动pp向后一位 else if (p[pp] == '*') asterisk = pp++, lastMatch = ps; // 以上情况都不是, 我们返回上一次星号的位置拿星号匹配 else if (asterisk > -1) ps = ++lastMatch, pp = asterisk + 1; // 如果之前连星号都没出现过, 直接返回不匹配 else return false; } // 看看p剩余的字符串里面有没有除了星号以外的字符 while (pp < p.length() && p[pp] == '*') pp++; return pp == p.length();}
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
- android LayoutInflater用法和源码解析
- MyEclipse中点击Deploy MyEclipse J2EE Project to Server没有反应解决方法
- 解决try catch finally中close的问题
- 博优商业管理系统SQL Anywhere(ASA) 数据库“File is shorter than expected -- transaction rolled back”错误修复
- 安卓 Notification使用笔记
- [LeetCode] 44. Wildcard Matching
- 如何写出优质程序(1)--排版
- Unity3d Profiler 踩坑记实
- 函数指针和指针函数
- js事件冒泡,元素中还有其他事件
- 关于java应用MD5校验文件和linux下md5Linux校验文件结果一致问题。
- python手记-twisted(5)
- 使用java发送邮件
- [bzoj3522][Poi2014]Hotel(暴力)