Leet Code 10 Regular Expression Matching
来源:互联网 发布:无人机淘宝可靠吗 编辑:程序博客网 时间:2024/05/01 15:04
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
这还是个hard的问题。。。在网上找了一种中等的答案。
1. Analysis
First of all, this is one of the most difficulty problems. It is hard to think through all different cases. The problem should be simplified to handle 2 basic cases:
- the second char of pattern is "*"
- the second char of pattern is not "*"
For the 1st case, if the first char of pattern is not ".", the first char of pattern and string should be the same. Then continue to match the remaining part.
For the 2nd case, if the first char of pattern is "." or first char of pattern == the first i char of string, continue to match the remaining part.
2. Java Solution 1 (Short)
The following Java solution is accepted.
public boolean isMatch(String s, String p) { if(p.length() == 0) return s.length() == 0; //p's length 1 is special case if(p.length() == 1 || p.charAt(1) != '*'){ if(s.length() < 1 || (p.charAt(0) != '.' && s.charAt(0) != p.charAt(0))) return false; return isMatch(s.substring(1), p.substring(1)); }else{ int len = s.length(); int i = -1; while(i<len && (i < 0 || p.charAt(0) == '.' || p.charAt(0) == s.charAt(i))){ if(isMatch(s.substring(i+1), p.substring(2))) return true; i++; } return false; } }
3. Java Solution 2 (More Readable)
public boolean isMatch(String s, String p) {// base caseif (p.length() == 0) {return s.length() == 0;} // special caseif (p.length() == 1) { // if the length of s is 0, return falseif (s.length() < 1) {return false;} //if the first does not match, return falseelse if ((p.charAt(0) != s.charAt(0)) && (p.charAt(0) != '.')) {return false;} // otherwise, compare the rest of the string of s and p.else {return isMatch(s.substring(1), p.substring(1));}} // case 1: when the second char of p is not '*'if (p.charAt(1) != '*') {if (s.length() < 1) {return false;}if ((p.charAt(0) != s.charAt(0)) && (p.charAt(0) != '.')) {return false;} else {return isMatch(s.substring(1), p.substring(1));}} // case 2: when the second char of p is '*', complex case.else {//case 2.1: a char & '*' can stand for 0 elementif (isMatch(s, p.substring(2))) {return true;} //case 2.2: a char & '*' can stand for 1 or more preceding element, //so try every sub stringint i = 0;while (i<s.length() && (s.charAt(i)==p.charAt(0) || p.charAt(0)=='.')){if (isMatch(s.substring(i + 1), p.substring(2))) {return true;}i++;}return false;}}
0 0
- Leet Code 10 Regular Expression Matching
- 10、Regular Expression Matching
- 10,Regular Expression Matching
- 10Regular Expression Matching
- 10 Regular Expression Matching
- 10、Regular Expression Matching
- 10Regular Expression Matching
- 【10】Regular Expression Matching
- 10-Regular Expression Matching
- Leetcode【10】:Regular Expression Matching
- [leetcode 10] Regular Expression Matching
- LeetCode(10) Regular Expression Matching
- [leetcode 10] Regular Expression Matching
- leetcode.10------------Regular Expression Matching
- [leetcode] 10 Regular Expression Matching
- [leetcode] 10 Regular Expression Matching
- LeetCode 10:《Regular Expression Matching》
- leecode 10 Regular Expression Matching
- 二层组播和冲突域
- 解读Tomcat(三):请求处理解析Part_1
- 笔记
- UVa 11212:Editing a Book(IDA*)
- sqlserver
- Leet Code 10 Regular Expression Matching
- spring配置详解
- 剑指offer 牛客网 。。。
- HTTP协议
- go 解析XML 设置缺省att的默认值
- [转发][纯记录]raid组的初始化详解
- Selection sort 选择排序
- PHP调试网页出现乱码解决方法!
- OpenCV视频进度播放控制