1. 程式人生 > >LeetCode-10. 正則表示式匹配

LeetCode-10. 正則表示式匹配

題目地址:https://leetcode-cn.com/problems/regular-expression-matching/
題意:字元分三種,普通字元,可以匹配任意字元的 ‘.’ ,可以將前一個字元重複若干次的 ’ * '。問s,p能否匹配。
思路:java一句話結束,但這樣就失去了做這個題的意義了。考慮大問題轉化為小問題處理,其實主要在於 ’ * '的處理。然而其實我覺得標程是有問題的,比如"aa"和”.**“為什麼是false呢。

class Solution {
public:
    
    bool dfs(string s,string p){
        if(p.length() == 0)//p匹配結束
            return s.length() == 0;
        if(p.length()==1 || (p[1]!='*')){//p的第二個不是*
            if(s.length() && (s[0] == p[0] || (p[0] == '.'))) //首字元是否能匹配
                return dfs(s.substr(1),p.substr(1));//遞迴匹配字串
            return false;
        }
        while(s.length() && (s[0] == p[0] || p[0]=='.')){//p的第二個為*,且第一個字元能正確匹配,while處理*重複多次
            if(dfs(s,p.substr(2)))
                return true;
            s =s.substr(1);
        }
        return dfs(s,p.substr(2));//第二個為*,且第一個字元不匹配
    }
    
    bool isMatch(string s, string p) {
        return dfs(s,p);
    }
};