leetcode 面试题 16.18 回溯法 题不难 只是细节比较多

leetcode 面试题 16.18 回溯法 题不难 只是细节比较多

leetcode 面试题 16.18 回溯法 题不难 只是细节比较多_第1张图片

//python3  leetcode 面试题 16.18  回溯法 题不难 只是细节比较多 +v 交流算法 alun503027568
class Solution:
    def patternMatching(self, pattern: str, value: str) -> bool:
  
        if pattern == 'a' or pattern == 'b':
            return True
        if pattern == "" and value == "":
            return True
        if (pattern == "" and value != "") or (pattern != "" and value == ""):
            return False
        ab = pattern.count(pattern[0]) 
        return self.isMacthing(pattern, value, int(len(value) / ab)) 

    def isMacthing(self, pattern, value, length):
        if length < 0:
            return False
        if len(pattern) - pattern.count(pattern[0]) == 0:
            len_b = 0
        else:
            len_b = int((len(value) - pattern.count(pattern[0]) * length) / (len(pattern) - pattern.count(pattern[0])))
   
        flag_b = ""
        index = 0
        str_ = ""
        flag = True
        for i in range(len(pattern)):
            if pattern[i] == pattern[0]:
                str_ += value[0:length]
                index += length
                if str_ != value[0:index]:
                    return self.isMacthing(pattern, value, length - 1)
            else:
                if flag and index + len_b <= len(value):
                    flag = False
                    flag_b = value[index:index + len_b]

                index += len_b
                str_ += flag_b
                if str_ != value[0:index]:
                    return self.isMacthing(pattern, value, length - 1)
        if str_ == value:
            return True
        return False

你可能感兴趣的:(算法)