LeetCode OJ--Regular Expression Matching
http://oj.leetcode.com/problems/regular-expression-matching/
问题给想复杂了,只有p中可以含有. *,s中的字符都是确定的。想了好久,最终还是参考了网上的答案。等我再想想。
#include <iostream>
#include <map>
#include <string>
using namespace std; class Solution {
public:
bool isMatch(const char *s, const char *p)
{
if (s == NULL || p == NULL) return false;
if (*p == '\0') return *s == '\0'; if (*(p + ) == '*')
{
while ((*s != '\0' && *p == '.') || *s == *p)
{
if (isMatch(s, p + )) return true; //aab a*cd
++s;
} return isMatch(s, p + ); //aab c*ab 的情况
}
else if ((*s != '\0' && *p == '.') || *s == *p)
{
return isMatch(s + , p + );
} return false;
}
}; int main()
{
Solution myS;
char *s = "aab";
char *p = "a*cd";
myS.isMatch(s,p);
return ;
}
于是,又试图用自己的解法,来做这道题。
class Solution {
public:
bool isMatch(const char *s, const char *p)
{
if (s == NULL || p == NULL) return false;
int j = ,i = ;
char flagchar = '\0';
while(s[i]!='\0'&&p[j]!='\0')
{
if(s[i] == p[j] )
{
flagchar = s[i];
i++;
j++;
}
else if(p[j] == '.')
{
i++;
j++;
flagchar = '\0';
}
else if(s[i]!= p[j] && p[j]!= '*' && p[j] != '\0' && p[j+]!='\0' && p[j+] == '*')
{
flagchar = p[j];
j+= ;
}
else if(p[j]=='*')
{
if(flagchar == '\0')
flagchar = s[i];
while(p[j+]!='\0'&&p[j+]==flagchar)
j++;
j++;
while(s[i]!='\0'&&s[i]==flagchar)
i++;
}
else
break;
}
if(s[i]=='\0'&&p[j]=='\0')
return true;
return false;
}
};
但是在"aaa", "ab*a*c*a"里,挂掉了。发现,当该边的只是规模的时候,确实递归非常好用。在这个地方,确实得递归。
在多种情况匹配不确定的时候,这个尝试
while ((*s != '\0' && *p == '.') || *s == *p)
{
if (isMatch(s, p + 2)) return true; //aab a*cd
++s;
}
return isMatch(s, p + 2); //aab c*ab 的情况
这里,大赞啊!
又长智商了。
LeetCode OJ--Regular Expression Matching的更多相关文章
- leetcode 10 Regular Expression Matching(简单正则表达式匹配)
最近代码写的少了,而leetcode一直想做一个python,c/c++解题报告的专题,c/c++一直是我非常喜欢的,c语言编程练习的重要性体现在linux内核编程以及一些大公司算法上机的要求,pyt ...
- [LeetCode][Python]Regular Expression Matching
# -*- coding: utf8 -*-'''https://oj.leetcode.com/problems/regular-expression-matching/ Implement reg ...
- LeetCode (10): Regular Expression Matching [HARD]
https://leetcode.com/problems/regular-expression-matching/ [描述] Implement regular expression matchin ...
- [LeetCode] 10. Regular Expression Matching 正则表达式匹配
Given an input string (s) and a pattern (p), implement regular expression matching with support for ...
- Leetcode 10. Regular Expression Matching(递归,dp)
10. Regular Expression Matching Hard Given an input string (s) and a pattern (p), implement regular ...
- [LeetCode] 10. Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. DP: public class Solution { publ ...
- 【leetcode】Regular Expression Matching
Regular Expression Matching Implement regular expression matching with support for '.' and '*'. '.' ...
- 【leetcode】Regular Expression Matching (hard) ★
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- 【JAVA、C++】LeetCode 010 Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- Java [leetcode 10] Regular Expression Matching
问题描述: Implement regular expression matching with support for '.' and '*'. '.' Matches any single cha ...
随机推荐
- percona-toolkit工具使用介绍
percona-toolkit工具使用介绍 1. pt-heartbeat 1.1 pt-heartbeat 原理 1.2 pt-heartbeat 主要参数介绍 1.3 pt-heartbeat 实 ...
- python处理excel总结
工作中,大家经常会使用excel去处理数据以及展示,但是对于部分工作我们可以借助程序帮忙实现,达到高效解决问题的效果,比如将接口返回的json解析并保存结果到excel中,按一定规律处理excel中的 ...
- Vue中引入TradingView制作K线图
**前言: 本文使用的是1.10版本 , 可通过TradingView.version()查看当前版本. 附上开发文档地址:https://zlq4863947.gitbooks.i...** 一.修 ...
- Lecture 3
surface models 1. The two main methods of creating surface models are interpolation and triangulatio ...
- LeetCode(238) Product of Array Except Self
题目 Given an array of n integers where n > 1, nums, return an array output such that output[i] is ...
- 线段树: CDOJ1598-加帕里公园的friends(区间合并,单点更新)
加帕里公园的friends Time Limit: 3000/1000MS (Java/Others) Memory Limit: 131072/131072KB (Java/Others) 我还有很 ...
- PAT Basic 1078
1078 字符串压缩与解压 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来表示.如果字符 ...
- selenium2用AutoIt上传文件
1.标签是input,如下图所示: WebElement e1= driver.findElement(By.id("load"));//输入要上传文件的地址e1.sendKeys ...
- NPM包的安装及卸载
NPM全名:node package manager,是node包管理工具,负责安装.卸载.更新等.新版的NodeJS已经集成了npm.所以装好NodeJS的同时,npm也已经装好了! 可以用cmd命 ...
- [POJ 1006] Biorhythms C++解题
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 107569 Accepted: 33365 ...