leetcode -10. Regular Expression Matching

三種狀況:spa

「a」 對應"a",code

"." 對應 "a"blog

"a*" 對應 「aa」字符串

 

當p爲空,s爲空時能夠匹配;string

若p的第二個字符爲*,第一狀況爲不匹配(b, a*b);從 (b,b)開始匹配io

                                    第二種狀況爲匹配(a, a*); 首元素相同, 從( ,a*)開始匹配ast

若p的第二個字符不爲*, 首字符必需要匹配, 再對首字符後的字符串匹配class

recursive solution:im

class Solution {
public:

    
    bool isMatch(string s, string p) {
        if(p.empty()) return s.empty();
      //  if(s.empty()) return p.empty();
       
        if(p[1]=='*')
        {
            return (isMatch(s,p.substr(2))||((p[0]==s[0]||p[0]=='.')&&!s.empty()&&isMatch(s.substr(1),p)));
           // if(p[0]==s[0]||p[0]=='.'&&!s.empty())
          //      return isMatch(s.substr(1),p);
          //  else
          //      return isMatch(s,p.substr(2));
        }
        else
        {
            if(p[0]==s[0]||p[0]=='.'&&!s.empty())
                return isMatch(s.substr(1),p.substr(1));
            else
                return false;
            //return (p[0]==s[0]||p[0]=='.')&&!s.empty()&&isMatch(s.substr(1),p.substr(1));
        }
    }
    
    
};

 

DP solution:img

定義若是  dp[i+1][j+1]匹配,當s[0-i]與p[0-j]匹配。

若是 p[j]!='*', dp[i][j]=dp[i-1][j-1] && s[i-1]==p[j-1];

若是p[j]=='*', dp[i][j]==dp[i][j-2], 0times repeat

                      dp[i][j]==dp[i-1][j]&& (s[i - 1] == p[j - 2] || p[j - 2] == '.')the pattern repeats for at least 1 times.

相關文章
相關標籤/搜索