博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
0010.Regular Expression Matching(H)
阅读量:4987 次
发布时间:2019-06-12

本文共 3760 字,大约阅读时间需要 12 分钟。

jjc

10. Regular Expression Matching(hard)Given an input string (s) and a pattern (p), 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).Note:s could be empty and contains only lowercase letters a-z.p could be empty and contains only lowercase letters a-z, and characters like . or *.Example 1:Input:s = "aa"p = "a"Output: falseExplanation: "a" does not match the entire string "aa".Example 2:Input:s = "aa"p = "a*"Output: trueExplanation: '*' means zero or more of the precedeng element, 'a'. Therefore, by repeating 'a' once, it becomes "aa".Example 3:Input:s = "ab"p = ".*"Output: trueExplanation: ".*" means "zero or more (*) of any character (.)".Example 4:Input:s = "aab"p = "c*a*b"Output: trueExplanation: c can be repeated 0 times, a can be repeated 1 time. Therefore it matches "aab".Example 5:Input:s = "mississippi"p = "mis*is*p*."Output: falseAccepted 298,051 Submissions 1,182,171

 

 

class Solution_S4ms {public:    bool isMatch(string s, string p) {        bool **dp = new bool*[s.length() + 1]();        for(int i = 0; i < s.length() + 1; ++i)        {            dp[i] = new bool[p.length()+1];             memset(dp[i], 0, p.length()+1);        }        dp[s.size()][p.size()] = true;        for (int i = s.length(); i >= 0; i--){            for (int j = p.length() - 1; j >= 0; j--)            {                bool first_match = (i < s.length() &&                                       (p[j] == s[i] ||                                        p[j] == '.'));                if (j + 1 < p.length() && p[j+1] == '*')                {                    dp[i][j] = dp[i][j+2] || first_match && dp[i+1][j];                }                else                {                    dp[i][j] = first_match && dp[i+1][j+1];                }            }        }        return dp[0][0];    }};class Solution_S8ms {public:    bool isMatch(string s, string p) {        int m = s.size(), n = p.size();        vector
> dp(m + 1, vector
(n + 1, false)); dp[0][0] = true; for (int i = 0; i <= m; ++i) { for (int j = 1; j <= n; ++j) { if (j > 1 && p[j - 1] == '*') { dp[i][j] = dp[i][j - 2] || (i > 0 && (s[i - 1] == p[j - 2] || p[j - 2] == '.') && dp[i - 1][j]); } else { dp[i][j] = i > 0 && dp[i - 1][j - 1] && (s[i - 1] == p[j - 1] || p[j - 1] == '.'); } } } return dp[m][n]; }};

 

/* https://www.cnblogs.com/grandyang/p/4461713.html * dp[i][j]表示s[0,i)和p[0,j)是否match1.  P[i][j] = P[i - 1][j - 1], if p[j - 1] != '*' && (s[i - 1] == p[j - 1] || p[j - 1] == '.');2.  P[i][j] = P[i][j - 2], if p[j - 1] == '*' and the pattern repeats for 0 times;3.  P[i][j] = P[i - 1][j] && (s[i - 1] == p[j - 2] || p[j - 2] == '.'), if p[j - 1] == '*' and the pattern repeats for at least 1 times.*/class Solution_grandyang {public:    bool isMatch(string s, string p) {        int m = s.size(), n = p.size();        vector
> dp(m + 1, vector
(n + 1, false)); dp[0][0] = true; for (int i = 0; i <= m; ++i) { for (int j = 1; j <= n; ++j) { if (j > 1 && p[j - 1] == '*') { dp[i][j] = dp[i][j - 2] || (i > 0 && (s[i - 1] == p[j - 2] || p[j - 2] == '.') && dp[i - 1][j]); } else { dp[i][j] = i > 0 && dp[i - 1][j - 1] && (s[i - 1] == p[j - 1] || p[j - 1] == '.'); } } } return dp[m][n]; }};

 

转载于:https://www.cnblogs.com/guxuanqing/p/10673833.html

你可能感兴趣的文章
Day-08 文件操作
查看>>
个人使用angular的一些小总结
查看>>
webservice wsdl axis2报错 Provider com.bea.xml.stream.MXParserFactory not found
查看>>
EOS1.1版本新特性介绍
查看>>
929. Unique Email Addresses
查看>>
3.常见的ORM框架
查看>>
Hdu 1326 Box of Bricks
查看>>
常用数据结构算法 : 堆排序
查看>>
Highcharts X轴名称太长,如何设置下面这种样式
查看>>
使用模板类,创建树。使用头文件分离模板类的申明与实现时出错
查看>>
王者的世界:全球十大对冲基金公司传奇
查看>>
Lua相关图书推荐
查看>>
CentOS安装phpMyAdmin
查看>>
JSTL标签
查看>>
RTT之柿饼UI
查看>>
C51 笔记
查看>>
wkhtmltopdf导出html到pdf
查看>>
Flutter 目录结构介绍、入口、自定义 Widget、MaterialApp 组件、Scaffold 组件
查看>>
小记5.8面试
查看>>
关于Windows7下创建Cocos2D-X项目的小问题
查看>>