【LeetCode】10.Regular Expression Matching(dp)
【题意】
给两个字符串s和p,判断s是否能用p进行匹配。
【题解】
dp[i][j]表示s的前i个是否能被p的前j个匹配。
首先可以分成3大类情况,我们先从简单的看起:
(1)s[i - 1] = p[j - 1],易得dp[i][j] = dp[i-1][j-1]
(2)p[i - 1] = '.',因为'.'可以匹配任何字符,所以dp[i][j] = dp[i-1][j-1]
(3)p[i - 1] = '*',这种情况就比较复杂了。
当p[j - 2] != s[i - 1] && p[j - 2] != '.'时,即当s = aba,p = abb*这种情况,因为 * 可以代表0个或多个,所以当p[j -2] != s[i - 1]时,往回倒退2个即dp[i][j] = dp[i][j - 2]
然后除去这种情况还有3种匹配情况,只要满足以下任意一种情况也是成立的
当 * 匹配多个时:dp[i][j] = dp[i - 1][j],即当s = abbb,p = ab*,因为b相等所以可以将s最后一个b删去,比较前面的abb与ab*从而实现 * 表示多个
当 * 匹配单个时:dp[i][j] = dp[i][j - 1],即当s = aba,p = aba*
当 * 匹配0个时:dp[i][j] = dp[i][j - 2],上面说过了
【代码】
1 class Solution {
2 public:
3 bool dp[35][35];
4 bool isMatch(string s, string p) {
5 s = " " + s;
6 p = " " + p;
7 memset(dp , false, sizeof(dp));
8 dp[0][0] = true;
9 int m = s.size(), n = p.size();
10 for (int i = 1; i <= m; i++){
11 for (int j = 1; j <= n; j++){
12 if (s[i - 1] == p[j - 1])dp[i][j] = dp[i - 1][j - 1];
13 else if (p[j - 1] == '.')dp[i][j] = dp[i - 1][j - 1];
14 else if (p[j - 1] == '*'){
15 if (s[i - 1] != p[j - 2] && p[j - 2] != '.')
16 dp[i][j] = dp[i][j - 2];
17 else{
18 dp[i][j] = dp[i][j - 1] || dp[i][j - 2] || dp[i - 1][j];
19 }
20 }
21 }
22 }
23 return dp[m][n];
24 }
25 };
【LeetCode】10.Regular Expression Matching(dp)的更多相关文章
- 【leetcode】10.Regular Expression Matching
题目描述: Implement regular expression matching with support for '.' and '*'. '.' Matches any single cha ...
- 【一天一道LeetCode】#10. Regular Expression Matching
一天一道LeetCode系列 (一)题目 Implement regular expression matching with support for '.' and '*'. '.' Matches ...
- 【LeetCode】010. Regular Expression Matching
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- leetcode 10 Regular Expression Matching(简单正则表达式匹配)
最近代码写的少了,而leetcode一直想做一个python,c/c++解题报告的专题,c/c++一直是我非常喜欢的,c语言编程练习的重要性体现在linux内核编程以及一些大公司算法上机的要求,pyt ...
- 【LeetCode】120. Triangle 解题报告(Python)
[LeetCode]120. Triangle 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址htt ...
- 【leetcode】Regular Expression Matching (hard) ★
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- leetcode problem 10 Regular Expression Matching(动态规划)
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- 《LeetBook》leetcode题解(10): Regular Expression Matching——DP解决正则匹配
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- LeetCode OJ:Regular Expression Matching(正则表达式匹配)
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
随机推荐
- CSS 解决Float后塌陷问题
当父级元素没有设定高度时候,而子集元素设定float类型时候,此时父级元素不能靠子集元素撑起来,所以就形成了塌陷: 示例分析 **1.Float之前的效果** <!DOCTYPE html> ...
- POJ1273 最大流模板
之前自己写的,以后当一个模板的基础吧,不管是最大流,最小割,二分图匹配 下面是POJ1273的一个裸题.. 1 #include <iostream> 2 #include <cst ...
- memcached php
What is Memcached? Free & open source, high-performance, distributed memory object caching syste ...
- Object & prototype & __proto__ All In One
Object & prototype & proto All In One js 原型,原型链,原型对象 const obj ={}; // {} const obj = new Ob ...
- vue & less bug
vue & less bug bezierEasingMixin(); ^ Inline JavaScript is not enabled. Is it set in your option ...
- SwiftUI render WKWebView
SwiftUI render WKWebView // // ContentView.swift // webview-app // // Created by 夏凌晨 on 2020/10/27. ...
- Swift 5.3
Swift 5.3 https://swift.org/blog/ refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- UI Design & App & Free Icons
UI Design & App & Free Icons icons8 https://icons8.com https://icons8.com/ouch Ouch可以帮助那些不进行 ...
- 比特币市场活跃,VAST发行在即!
截至1月25日13:30,BTC合约多空持仓人数比为1.44,市场做多人数占据优势:季度合约基差保持在1255美元上方,永续合约资金费率为正,交割及永续合约持仓总量为19.5亿美元,总体上多军占优:B ...
- Techme INC解读基因魔剪,带来的是机遇还是风险?
10月7日,诺贝尔化学奖颁给了法国美国生物学家Jennifer Doudna和生物化学家Emmanuelle Charpentier,以表彰她们对新一代基因技术CRISPR的贡献,全网沸腾. CRIS ...