LeetCode10-Regular Expression Matching
来源:互联网 发布:济南js复合保温模板 编辑:程序博客网 时间:2024/06/05 23:03
【题目】
Implement regular expression matching with support for '.'
and '*'
.
'.' Matches any single character.'*' Matches zero or more of the preceding element.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", "a*") → trueisMatch("aa", ".*") → trueisMatch("ab", ".*") → trueisMatch("aab", "c*a*b") → true
【思路】该文借鉴了http://blog.csdn.net/hopeztm/article/details/7992253/中所提出的方法,
1、若当前p的下一个字符不为‘*’,则比较s和p的当前字符,若匹配,则s和p同时向后移动一个字符,否则,返回false;
2、若当前p的下一个字符为‘*’,则在s和p的当前字符可以匹配的情况下进入循环:
a) 、p向后移动两个字符后与当前s是否匹配,若匹配,退出循环,返回true,否则,进入b);
b) 、s向后移动一个字符,重新开始循环;
若s和p的当前字符不匹配,则直接将p向后移动两个字符,返回新字符串p与s的匹配结果;
【解疑】
Q:s和p的当前字符怎样才算匹配?
A:第一种情况——字符相同;
第二种情况——p当前字符为‘.’,且s不为空;
Q:第2步的循环中,步骤a)和步骤b)的顺序是否可以颠倒?
A:不可以,举例说明s = "daa"以及p="da*a"的匹配过程:
正确过程:p先向后移动两个字符错误过程:s先向后移动一个字符
【Java代码】
public class Solution_10_regular_expression_matching {public static boolean isMatch(String s, String p){if(p.length() == 0) return s.length() == 0;if(p.length() == 1 || p.charAt(1) != '*'){if((s.length() != 0 && s.charAt(0) == p.charAt(0)) || (p.charAt(0) == '.' && s.length() != 0))return isMatch(s.substring(1),p.substring(1));elsereturn false;}else{while((s.length() != 0 && s.charAt(0) == p.charAt(0)) || (p.charAt(0) == '.' && s.length() != 0)){boolean current = isMatch(s,p.substring(2));if(current) return current;else s = s.substring(1);}return isMatch(s,p.substring(2));}}}
0 0
- LeetCode10 Regular Expression Matching
- LeetCode10:Regular Expression Matching
- leetcode10. Regular Expression Matching
- Leetcode10 Regular Expression Matching
- LeetCode10 Regular Expression Matching
- LeetCode10. Regular Expression Matching
- LeetCode10. Regular Expression Matching
- LeetCode10:Regular Expression Matching
- LeetCode10-Regular Expression Matching
- leetcode10. Regular Expression Matching
- LeetCode10. Regular Expression Matching翻译
- leetcode10 Regular Expression Matching @python
- LeetCode10. Regular Expression Matching有点难
- leetcode10-Regular Expression Matching之Java版本
- Leetcode10:Regular Experssion Matching
- LeetCode: Regular Expression Matching
- LeetCode: Regular Expression Matching
- leetcode Regular Expression Matching
- 移动端左划右划事件触发简单的代码
- dubbo通信协议之对比
- Qt事件机制的小实验
- Mysql数据库部分笔记
- MongoDB学习之路---one
- LeetCode10-Regular Expression Matching
- gsm-modem-cms-error-code-list
- POJ
- MIT的《深度学习》精读(23)
- Android中webview与js交互
- COGS 14. [网络流24题] 搭配飞行员
- HDU 1358 Period(KMP+求某个前缀含几个循环)
- ORACLE获取字符串中数字部分
- 第八天2017/04/17(3、C++的几个语法)