leetcode 010 —— Regular Expression Matching(hard)

原创 2015年07月07日 21:57:44

题目:

'.' 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") → false
isMatch("aa","aa") → true
isMatch("aaa","aa") → false
isMatch("aa", "a*") → true
isMatch("aa", ".*") → true
isMatch("ab", ".*") → true
isMatch("aab", "c*a*b") → true

题意: 

相关题目:

Wildcard Matching 44


思路1:递归实现 (效率很低,花了整整480ms)

如果P[j+1]!='*',S[i] == P[j]  匹配下一位(i+1, j+1),S[i]!=P[j] 匹配失败;
如果P[j+1]=='*',S[i]==P[j]   匹配(i, j+2),S[i]!=P[j] 匹配下一位(i,j+2)。
匹配成功的条件为S[i]=='\0' && P[j]=='\0'。

class Solution {
public:
	bool isMatch(string s, string p) {
		if (p.size()==0) return s.size()==0;
		if (p.size() == 1)
			return (s.size() == 1) && (s[0] == p[0] || p[0] == '.');
		if (p[1] != '*'){
			if (s.size()&&(s[0] == p[0] || p[0] == '.'))
				return isMatch(s.substr(1), p.substr(1));
			else
				return false;
		}
		while (s.size()&&(s[0] == p[0] || p[0] == '.')){
			if (isMatch(s, p.substr(2)))
				return true;
			s = s.substr(1);
		}
		return isMatch(s, p.substr(2));
	}
};


思路二:动态规划:

以现在的水平还不足以领会这个问题,以后回来解决

http://blog.csdn.net/fzzying3/article/details/42057935

leetcode 10: Regular Expression Matching 分析及解答

解读: •‘.'代表一个任意字符,与其附近的字符无关 •’*‘代表o个或者多个前面的字符,该字符影响前面字符的“存在”,例如:a*={ε,a,aa,aaa,…},即当"*"表示0个前面的字符时,该字符...
  • u012150792
  • u012150792
  • 2016年07月22日 20:56
  • 366

[LeetCode][10]Regular Expression Matching解析 -Java实现

Q: Implement regular expression matching with support for '.' and '*'. '.' Matches any single ...
  • u014629433
  • u014629433
  • 2016年06月11日 14:38
  • 1959

★leetcode10_Regular Expression Matching[附动态规划]

一.问题描述 Implement regular expression matching with support for '.' and '*'. '.' Matches any single ...
  • u014265088
  • u014265088
  • 2016年09月18日 15:21
  • 924

leetcode 10: Regular Expression Matching

Regular Expression Matching Total Accepted: 39732 Total Submissions: 192279 Implement re...
  • xudli
  • xudli
  • 2015年05月01日 02:22
  • 2271

《LeetBook》leetcode题解(10): Regular Expression Matching——DP解决正则匹配

010. Regular Expression Matching 这里面最复杂的操作是"*",这是个很可恶的操作,因为你永远不知道它多长。但是有一点,"*"不会单独出现,它一定是和前面一个字母或"."...
  • hk2291976
  • hk2291976
  • 2016年04月15日 21:50
  • 3042

Leetcode: Regular Expression Matching

Implement regular expression matching with support for '.' and '*'. '.' Matches any single character...
  • doc_sgl
  • doc_sgl
  • 2013年10月14日 23:09
  • 19706

Regular Expression Matching -- LeetCode

原题链接: http://oj.leetcode.com/problems/regular-expression-matching/  这个题目比较常见,但是难度还是比较大的。我们先来看看brute ...
  • linhuanmars
  • linhuanmars
  • 2014年03月16日 16:16
  • 27428

leetcode 10 Regular Expression Matching(简单正则表达式匹配)

最近代码写的少了,而leetcode一直想做一个python,c/c++解题报告的专题,c/c++一直是我非常喜欢的,c语言编程练习的重要性体现在linux内核编程以及一些大公司算法上机的要求,pyt...
  • wangyaninglm
  • wangyaninglm
  • 2017年02月21日 01:19
  • 1047

leetcode第10题——***Regular Expression Matching

题目 Implement regular expression matching with support for '.' and '*'. '.' Matches any single char...
  • buptlrw
  • buptlrw
  • 2016年01月05日 16:07
  • 1281

LeetCode 010 Regular Expression Matching

【题目】 Implement regular expression matching with support for '.' and '*'. '.' Matches any single c...
  • HarryHuang1990
  • HarryHuang1990
  • 2014年05月14日 14:20
  • 869
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode 010 —— Regular Expression Matching(hard)
举报原因:
原因补充:

(最多只允许输入30个字)