【LeetCode 10】正则表达式匹配
【题解】
看到这个[题解](https://leetcode-cn.com/problems/regular-expression-matching/solution/ji-yu-guan-fang-ti-jie-gen-xiang-xi-de-jiang-jie-b/)
写的代码。
就是加个备忘录法。优化一下暴力的做法。
匹配的时候如果遇到*号的话,就两种可能。不再考虑它前面一个字符了。
跳过这个*或者。或者继续用*前面那个字符匹配。
即dfs(i,j+2) 不和他匹配了 && (i和j能匹配且j+1是个*则继续复制一个和其匹配,dfs(i+1,j))
当然,还得尝试一下不用*通配符了(s1[i]==s2[j])然后直接看看dfs(i+1,j+2)能不能匹配
【代码】
class Solution {
public:
map<pair<int,int>,bool> dic;
int len1,len2;
bool ok(string &s1,string &s2,int i,int j){
if (dic.find(make_pair(i,j))!=dic.end()) return dic[make_pair(i,j)];
//cout<<"**"<<i<<" "<<j<<endl;
if (i==len1){
if (j==len2){
return true;
}
//j!=len2不代表一定不能匹配。可能后面有*号
}
if (j==len2) return false;
bool firstmatch = false;
if (i<len1 && (s1[i]==s2[j] || s2[j]=='.')) firstmatch=true;
//能够匹配到
//cout<<i<<" "<<j<<" "<<firstmatch<<endl;
if (firstmatch && ok(s1,s2,i+1,s2[j+1]=='*'?j+2:j+1)) return true; //j+1是通配符的话,要跳过它。
if (j+1==len2 || s2[j+1]!='*') return false;
//j+1<len2 && s2[j+1]=='*'
bool ju = ok(s1,s2,i,j+2) || (firstmatch && ok(s1,s2,i+1,j));
dic[make_pair(i,j)] = ju;
return ju;
}
bool isMatch(string s, string p) {
dic.clear();
len1 = s.size();len2 = p.size();
return ok(s,p,0,0);
}
};
【LeetCode 10】正则表达式匹配的更多相关文章
- Leetcode 10. 正则表达式匹配 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- Java实现 LeetCode 10 正则表达式匹配
10. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配, ...
- [LeetCode] 10. 正则表达式匹配
题目链接:https://leetcode-cn.com/problems/regular-expression-matching/ 题目描述: 给定一个字符串 (s) 和一个字符模式 (p).实现支 ...
- LeetCode 10. 正则表达式匹配(Regular Expression Matching)
题目描述 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s ...
- LeetCode 10——正则表达式匹配
1. 题目 2. 解答 在 回溯算法 中我们介绍了一种递归的思路来求解这个问题. 此外,这个问题也可以用动态规划的思路来解决.我们定义状态 \(P[i][j]\) 为子串 \(s[0, i)\) 和 ...
- leetcode题目10.正则表达式匹配(困难)
题目描述: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 ...
- 【LeetCode】正则表达式匹配(动态规划)
题目描述 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s ...
- LeetCode10. 正则表达式匹配
10. 正则表达式匹配 描述 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该 ...
- leetcode 10 Regular Expression Matching(简单正则表达式匹配)
最近代码写的少了,而leetcode一直想做一个python,c/c++解题报告的专题,c/c++一直是我非常喜欢的,c语言编程练习的重要性体现在linux内核编程以及一些大公司算法上机的要求,pyt ...
- Leetcode(10)正则表达式匹配
Leetcode(10)正则表达式匹配 [题目表述]: 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或 ...
随机推荐
- C++ 排序(未完)
参考: 快速排序 堆排序 各类排序 #include <iostream> #include <vector> #include <time.h> #include ...
- rsync和rsync后台模式
注意(有软连接的rsync同步,-L可以把软链接里的当普通文件同步.-l 只同步软链接不同步软链接指向的目录或文件) rsync命令详解 rsync -a 归档模式 ,表示以递归方式传输文件,并保持所 ...
- mysql授权、删除用户和角色权限
备份权限 GRANT USAGE ON *.* TO 'backup'@'172.16.0.157' IDENTIFIED BY PASSWORD '*38B4F16EADB1601E713D9F03 ...
- [CSP-S模拟测试62]题解
A.Graph 因为点可以随便走,所以对于每个联通块,答案为边数/2向下取整. 用类似Tarjan的方式,对于每个联通块建立一棵搜索树,尽量让每一个节点的儿子两两配对,如果做不到就用上头顶的天线. # ...
- 【Java架构:基础技术】一篇文章搞掂:Gradle
前言 Gradle是什么: Gradle提供了一个域特定语言(DSL),用于描述构建 它使用 Groovy 语言,使其更容易来形容和构建 Gradle 中的每一个构建脚本使用UTF-8进行编码保存,并 ...
- PHP基础知识总结(五) php面试题
1.Ajax跨域 json:数据交换格式,{"name":"wangtianle"} jsonp:非官方跨域数据交换协议,可以通过动态添加<script/ ...
- Weblogic console控制台密码更改后导致重启服务失败
weblogic版本10.3.3.0 更改控制台密码后,服务重启失败,报错如下: ----------------------------------------------------------- ...
- spring MVC 返回值信息和ResponseBody的响应json数据
spring mvc的界面返回: 如果我们定义的返回类型是String 那么我们返回的时候直接写入 我们的界面的名字就可以了 springmvc会自动去找到我们的界面,如果是void类型的返回那么 ...
- Angularjs实现简单的登陆框
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- 大型项目必备IPC之其他IPC方式(二)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680IPC的6种方式IPC是Inter-Process Communicati ...