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

results matching ""

    No results matching ""