劍指正則表達式.*

因爲這個想得太亂了,mark在這邊記下來

NOTE:涉及二元的只有*,因此將*和其他分開即可。同時又是一個遞歸方法,設置掃描終止條件。

class Solution3:
    # s, pattern都是字符串
    # 問題可以分爲兩個部分,匹配過了的,和沒有匹配的,可以拆分之後用遞歸來完成
    # 每次匹配第一位時,都有三種情況
    def match(self, s, pattern):
        # write code here
        if s is None or pattern is None:
            return False
        s_idx = 0
        pattern_idx = 0
        return self.matchCore(s, s_idx, pattern, pattern_idx)

    def matchCore(self, s, s_idx, pattern, p_idx):
        if len(s) == s_idx and len(pattern) == p_idx:
            return True
        if len(s) > s_idx and len(pattern) == p_idx:
            return False

        if p_idx + 1 < len(pattern) and pattern[p_idx + 1] == '*':
            if (not isChrTail(len(s), s_idx)) and (pattern[p_idx] == s[s_idx] or pattern[p_idx] == '.'):
                return self.matchCore(s, s_idx + 1, pattern, p_idx + 2) or self.matchCore(s, s_idx, pattern,p_idx + 2) or self.matchCore(s, s_idx + 1,pattern,p_idx)
                pass
            else:
                return self.matchCore(s, s_idx, pattern, p_idx + 2)
                pass
            pass

        if (not isChrTail(len(s), s_idx)) and (pattern[p_idx] == s[s_idx] or pattern[p_idx] == '.'):
            return self.matchCore(s, s_idx + 1, pattern, p_idx + 1)
        return False


def isChrTail(str_len, idx):
    if str_len - idx:
        return False
    return True

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章