Leetcode-Regular Expression Matching

来源:互联网 发布:c语言程序等腰三角形 编辑:程序博客网 时间:2024/06/07 17:56

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
DP

bool isMatch(string s, string p) {    int sl=s.length();    int pl=p.length();    vector<vector<bool>> dp(pl+1,vector<bool>(sl+1,false));    dp[0][0]=true;    for(int i=1;i<=pl;++i)    {        dp[i][0]=i-2>=0&&p[i-1]=='*'&&dp[i-2][0];        for(int j=1;j<=sl;++j)        {            if(p[i-1]==s[j-1]||p[i-1]=='.')            {                dp[i][j]=dp[i-1][j-1];            }            else if(p[i-1]=='*'&&i-2>=0)            {                if(dp[i-2][j]||((p[i-2]==s[j-1]||p[i-2]=='.')&&dp[i][j-1]))                {                    dp[i][j]=true;                }                else                 {                    dp[i][j]=false;                }            }            else            {                dp[i][j]=false;            }        }    }    return dp[pl][sl];    }
0 0
原创粉丝点击