美文网首页
LeetCode 10

LeetCode 10

作者: Junr_0926 | 来源:发表于2018-10-16 22:34 被阅读0次

10. Regular Expression Matching

给定一个输入字符串s,一个模式p,实现支持.*的正则匹配:

'.' 匹配单个字符
'*' 匹配零个或者多个元素

  • Example 1

输入:s='aa', p='a'
输出:false

  • Example 2

输入:s='aa',p='a*'
输出:true

  • Example 3

输入:s='ab',p='.*'
输出:true

思路

动态规划思路,首先我们定义P[i][j]为true,如果s[0...i) 和 p[0...j)匹配,否则为false,那么,分三种情况:

Screen Shot 2018-10-16 at 10.16.08 PM.png
class Solution {
public:
    bool isMatch(string s, string p) {
        int m = s.length(), n = p.length(); 
        vector<vector<bool> > dp(m + 1, vector<bool> (n + 1, false));
        dp[0][0] = true;
        for (int i = 0; i <= m; i++)
            for (int j = 1; j <= n; j++)
                if (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];
    }
};

相关文章

网友评论

      本文标题:LeetCode 10

      本文链接:https://www.haomeiwen.com/subject/tdykzftx.html