Medium
a
的可能性是从空字符串到整个value
字符串。同样b
也是pattern[0]
为a
,我们先列出a
的可能性a
确定了之后,我们再看pattern[1]
,pattern[1]
为b
b
没有确定过,所以b
的可能性是从上一个确定的字符串剩下的开始到整个value
pattern[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})