Medium
a的可能性是从空字符串到整个value字符串。同样b也是pattern[0] 为a,我们先列出a的可能性a确定了之后,我们再看pattern[1],pattern[1]为bb没有确定过,所以b的可能性是从上一个确定的字符串剩下的开始到整个valuepattern[2]还是b,b已经确定过了,我们用b匹配剩下的内容。发现不一样,说明b的值确定的不正确,需要重新确认pattern都与value都匹配完成显然使用递归来求解
a或b对应的子串之后,将剩下的pattern和value,抛给下一层递归pattern和value 都为空,表示匹配完成;确定了的子串,和剩下的value不匹配,终止,返回上层重新选择a或b的子串a和b对应的子串应该不相同尝试写一下代码,AC!
python3
class Solution:
def helper(self, pattern, value, match):
if pattern == '' and value != '':
return False
if pattern == '' and value == '' :
return True
p = pattern[0]
if match[p] != None:
if value.startswith(match[p]):
return self.helper(pattern[1:], value.replace(match[p], '', 1), match)
else:
return False
for m in range(len(value) + 1):
w = value[0:m]
if match['a'] == w or match['b'] == w: #a或b已经匹配到了
continue
match[p] = w
if (self.helper(pattern[1:], value.replace(match[p], '', 1), match)):
return True
match[p] = None
return False
def patternMatching(self, pattern: str, value: str) -> bool:
return self.helper(pattern, value, {'a':None, 'b':None})