leetcode 面试题 16.18 回溯法 题不难 只是细节比较多
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200317160112849.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzYxMTA2MQ==,size_16,color_FFFFFF,t_70)
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