LeetCode-10. 正則表示式匹配
阿新 • • 發佈:2018-12-08
題目地址: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); } };