zoukankan      html  css  js  c++  java
  • 10. Regular Expression Matching

    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).

     

    The function prototype should be:

    bool isMatch(const char *s, const char *p)

     

    Some examples:

    isMatch("aa","a") → false

    isMatch("aa","aa") → true

    isMatch("aaa","aa") → false

    isMatch("aa", "a*") → true

    isMatch("aa", ".*") → true

    isMatch("ab", ".*") → true

    isMatch("aab", "c*a*b") → true

    Subscribe to see which companies asked this question

            这个问题是一个典型的动态规划。我们设置一个数组dp,dp[i][j]在s[0...i) 符合正则表达式p[0..j)的情况下,为true,反之则为false。

            以下是状态转移方程:

    当 p[j-1]!='*'

         dp[i][j]=i>0&&dp[i-1][j-1]&&(s[i-1]==p[j-1]||p[j-1]=='.')

    否则

        (忽略.*或者x*)              (已经匹配了x)                    (匹配了x)

        dp[i][j]=dp[i][j-2]||(i>0&&dp[i-1][j]&&(s[i-1]==p[j-2]||p[j-2]=='.'))

    class Solution {
    public:
        bool isMatch(string s, string p) {
            int m=s.length();
            int 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]=i>0&&dp[i-1][j-1]&&(s[i-1]==p[j-1]||p[j-1]=='.');
                    }
                    else{
                        dp[i][j]=dp[i][j-2]||(i>0&&dp[i-1][j]&&(s[i-1]==p[j-2]||p[j-2]=='.'));
                    }
                }
            }
            return dp[m][n];
        }
    };
  • 相关阅读:
    js showModalDialog参数传递
    1:N 关系
    1:N 关系 视图查找
    设置IE主页和添加收藏夹的功能
    GridView和DataFormatString网站技术
    JS 的table属性操作,
    GridView帮定数据显示数据的技巧
    后台取相同name值的问题
    赶集网CEO杨浩涌:倒闭没那么容易
    用户数据泄露案告破:嫌疑人已抓 CSDN受到警告
  • 原文地址:https://www.cnblogs.com/zhoudayang/p/5289585.html
Copyright © 2011-2022 走看看