LeetCode 10 Regular Expression Matching (C,C++,Java,Python)
来源:互联网 发布:网络用语开车什么意思 编辑:程序博客网 时间:2024/06/17 03:32
Problem:
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
Solution:
多种方法解决,可以用DFS,也可以用DP,参考这里:http://blog.csdn.net/hcbbt/article/details/44016237
题目大意:
给定一个字符串和一个正则表达式,给出正则是否匹配字符串
解题思路:
关键问题在*上面,*可以占用零个或者多个位置,因此用DFS的办法就是尝试遍所有的可能匹配的情况,比如AAAAAB和A*B,就要看AAAAAB和B还有AAAB和B和AB和B
Java源代码(用时302ms):
public class Solution { public boolean isMatch(String s, String p) { char[] chs = s.toCharArray(); char[] chp = p.toCharArray(); return Match(chs,0,chp,0); } public boolean Match(char[] chs,int index1,char[] chp,int index2){ if(index2>=chp.length)return index1>=chs.length; if(index2+1<chp.length && chp[index2+1]=='*'){ while(index1<chs.length && (chp[index2]=='.' || chp[index2]==chs[index1])){ if(Match(chs,index1,chp,index2+2))return true; index1++; } return Match(chs,index1,chp,index2+2); }else if(index1<chs.length && (chp[index2]=='.' || chs[index1]==chp[index2])){ return Match(chs,index1+1,chp,index2+1); } return false; }}
C语言源代码(用时21ms):
bool isMatch(char* s, char* p) { if(s==NULL || p==NULL)return false; if(!*p) return !*s; if(*(p+1)=='*'){ while((*p==*s)||(*s && *p=='.')){ if(isMatch(s,p+2))return true; s++; } return isMatch(s,p+2); }else if((*p==*s)||(*s && *p=='.')){ return isMatch(s+1,p+1); } return false;}
C++源代码(用时407ms):
class Solution {public: bool isMatch(string s, string p) { return Match(s,0,p,0); } bool Match(string s,int index1,string p,int index2){ if(index2>=p.size())return index1>=s.size(); if(index2+1<p.size() && p[index2+1]=='*'){ while(index1<s.size() && (p[index2]=='.' || p[index2]==s[index1])){ if(Match(s,index1,p,index2+2))return true; index1++; } return Match(s,index1,p,index2+2); }else if(index1<s.size() && (p[index2]=='.' || p[index2]==s[index1])){ return Match(s,index1+1,p,index2+1); } return false; }};
Python源代码(调用自带函数用时140ms):
class Solution: # @param {string} s # @param {string} p # @return {boolean} def isMatch(self, s, p): return re.match('^' + p + '$', s) != None
Python源代码(DFS超时):
class Solution: # @param {string} s # @param {string} p # @return {boolean} def isMatch(self, s, p): return self.Match(s,0,p,0) def Match(self,s,index1,p,index2): if index2>=len(p):return index1>=len(s) if index2+1<len(p) and p[index2+1]=='*': while index1<len(s) and (p[index2]=='.' or p[index2]==s[index1]): if self.Match(s,index1,p,index2+2):return True index1+=1 return self.Match(s,index1,p,index2+2) elif index1<len(s) and (p[index2]=='.' or p[index2]==s[index1]): return self.Match(s,index1+1,p,index2+1) return False
0 0
- LeetCode 10 Regular Expression Matching (C,C++,Java,Python)
- [LeetCode] 010. Regular Expression Matching (Hard) (C++/Java/Python)
- [leetcode-10]Regular Expression Matching(C)
- [Leetcode] Regular Expression Matching (Java)
- Regular Expression Matching Leetcode Java
- [LeetCode][Java] Regular Expression Matching
- LeetCode : Regular Expression Matching [java]
- leetcode Regular Expression Matching(Java)
- 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》
- leetcode 10: Regular Expression Matching
- LeetCode 10 - Regular Expression Matching
- Mini2440使用USB无线网卡(wifi)
- VS2013如何自己编写C++类
- STL函数整理
- 【contentprovider系列4】删除联系人信息
- Struts2容器详解---IoC源码分析
- LeetCode 10 Regular Expression Matching (C,C++,Java,Python)
- code hunt 题解一 (java 版)
- php 总结
- 第8周项目1(1)实现复数类中的运算符重载
- 文件上传和下载
- 递归列出目录下文件
- 分层遍历二叉树
- eclipse
- Phoenix(一)介绍