Word Pattern II
这道题还是跟第一问一样,都是有一个双向哈希的关系,两边的条件都不能违背,另外存在一个双搜索,即pattern和string同时推进,其他方面倒是不觉得有多难
class Solution(object):
def wordPatternMatch(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
return self.helper(pattern, 0, len(pattern), str, 0, len(str), {}, {})
def helper(self, pattern, patSt, patEd, string, stringSt, stringEd, patToStringCheck, strToPatCheck):
if patSt == patEd and stringSt == stringEd:
return True
elif patSt == patEd or stringSt == stringEd:
return False
for i in xrange(stringSt, stringEd):
if pattern[patSt] in patToStringCheck and (string[stringSt : i + 1] in strToPatCheck):
if patToStringCheck[pattern[patSt]] != string[stringSt : i + 1]:
continue
if strToPatCheck[string[stringSt : i + 1]] != pattern[patSt]:
continue
if self.helper(pattern, patSt + 1, patEd, string, i + 1, stringEd, patToStringCheck, strToPatCheck):
return True
elif pattern[patSt] not in patToStringCheck and (string[stringSt : i + 1] not in strToPatCheck):
patToStringCheck[pattern[patSt]] = string[stringSt : i + 1]
strToPatCheck[string[stringSt : i + 1]] = pattern[patSt]
if self.helper(pattern, patSt + 1, patEd, string, i + 1, stringEd, patToStringCheck, strToPatCheck):
return True
patToStringCheck.pop(pattern[patSt])
strToPatCheck.pop(string[stringSt : i + 1])
return False