LeetCode | Regular Expression Matching
Regular Expression Matching
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") → 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
思路是分别处理a*、.*、.、a的情况。
三周前写的lengthy code如下:
 class Solution {
 public:
     bool isMatch(const char *s, const char *p) {
         int sn = strlen(s);
         int pn = strlen(p);
         return recursive(s, sn, p, pn);
     }
     bool recursive(const char* s, int sn, const char* p, int pn) {
         if (sn ==  && pn == ) return true;
         if (pn == ) return false;
         if (*(p + ) != '\0') {
             if (*(p + ) == '*') {
                 if (*p == '.') { // .*
                     int n = ;
                     while (n <= sn) {
                         if (recursive(s + n, sn - n, p + , pn - )) return true;
                         n++;
                     }
                 } else { // a*
                     int n = ;
                     while (n <= sn && *(s + n) == *p) {
                         if (recursive(s + n, sn - n, p + , pn - )) return true;
                         n++;
                     }
                     if (recursive(s + n, sn - n, p + , pn - )) return true;
                 }
             } else {
                 if (*p != '.' && *s != *p) return false;
                 if (recursive(s + , sn - , p + , pn - )) return true;
             }
         } else {
             if (*p != '.' && *s != *p) return false;
             if (recursive(s + , sn - , p + , pn - )) return true;
         }
     }
 };
今天看了Leetcode上1337的代码真是羞愧啊。http://leetcode.com/2011/09/regular-expression-matching.html
重写了一遍。思路还是一样。
 class Solution {
 public:
     bool isMatch(const char *s, const char *p) {
         if (*p == '\0') return (*s == '\0');
         // match single '\0', '.', 'a'...
         if (*(p + ) != '*') {
             return ((*s == *p || (*p == '.' && *s != '\0')) && isMatch(s + , p + ));
         }
         // match a*, .*
         while ((*s == *p || (*p == '.' && *s != '\0'))) {
             if (isMatch(s++, p + )) return true;
         }
         // ignore a*, *p != '.' && *s != *p
         return isMatch(s, p + );
     }
 };
LeetCode | Regular Expression Matching的更多相关文章
- [LeetCode] Regular Expression Matching 正则表达式匹配
		Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ... 
- [leetcode]Regular Expression Matching @ Python
		原题地址:https://oj.leetcode.com/problems/regular-expression-matching/ 题意: Implement regular expression ... 
- [LeetCode] Regular Expression Matching(递归)
		Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ... 
- [LeetCode] Regular Expression Matching [6]
		称号: Implement regular expression matching with support for '.' and '*'. '.' Matches any single chara ... 
- LeetCode——Regular Expression Matching
		Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ... 
- Leetcode:Regular Expression Matching分析和实现
		题目大意是要求我们实现一个简单的正则表达式全匹配判断.其中正则表达式中只包含一般字符,以及全匹配字符.和变长字符*.其中.可以匹配一个字符,而*与前一个字符相关联,x*可以被看作任意多个x(0到正无穷 ... 
- LeetCode Regular Expression Matching  网上一个不错的实现(非递归)
		'.' Matches any single character.'*' Matches zero or more of the preceding element. The matching sho ... 
- LeetCode: Regular Expression Matching  解题报告
		Roman to IntegerGiven a roman numeral, convert it to an integer. Input is guaranteed to be within th ... 
- lc面试准备:Regular Expression Matching
		1 题目 Implement regular expression matching with support for '.' and '*'. '.' Matches any single char ... 
随机推荐
- 2.saltstack笔记之目标,模块,返回写入数据库
			作者:刘耀 QQ:22102107 一.目标(targeting Minions) 1.匹配Minions Id 匹配所有 (*) [root@node1 salt]# salt '*' test.p ... 
- ShortestPath:Wormholes(POJ 3259)
			田里的虫洞 题目大意:就是这个农夫的田里有一些虫洞,田有很多个点,点与点之间会存在路,走过路需要时间,并且这些点存在虫洞,可以使农夫的时间退回到时间之前,问你农夫是否真的能回到时间之前? 读完题:这一 ... 
- codeforces  489B. BerSU Ball  解题报告
			题目链接:http://codeforces.com/problemset/problem/489/B 题目意思:给出 n 个 boys 的 skills 和 m 个 girls 的 skills,要 ... 
- java关闭流,解压缩后的清除
			关闭流文件和file文件的时候,先打开的后关闭,后打开的先关闭,实在不行调用system.jc()方法 
- Auguse 2nd, Week 32nd Tuesday, 2016
			Love me little and love me long.不求情意绵绵,但愿天长地久. Friends are relatives you make for yourself.朋友是你自己结交的 ... 
- eclipse 优化提速
			1.windows–>perferences–>general–>startup and shutdown关掉没用的启动项: WTP :一个跟myeclipse差不多的东西,主要差别 ... 
- tuple元组(C++11及以后,如C++14)
			类tuple与array最本质的区别当数tuple元组元素类型可以不一样,而统一数组array的元素类型必须一样. 本文主要举例: tuple_size Example 123456789101112 ... 
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令(转)
			hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ... 
- Kafka学习笔记(二):Partition分发策略
			kafka版本0.8.2.1 Java客户端版本0.9.0.0 为了更好的实现负载均衡和消息的顺序性,Kafka Producer可以通过分发策略发送给指定的Partition.Kafka保证在par ... 
- stsadm.exe
			Usage: stsadm.exe -o <operation> [<parameters>] stsadm.exe -help [<operation>] Ope ... 
