天天看點

leetcode336. Palindrome Pairs

Given a list of unique words. Find all pairs of distinct indices (i, j) in the given list, so that the concatenation of the two words, i.e. words[i] + words[j] is a palindrome.

Example 1:

Given words = [“bat”, “tab”, “cat”]

Return [[0, 1], [1, 0]]

The palindromes are [“battab”, “tabbat”]

Example 2:

Given words = [“abcd”, “dcba”, “lls”, “s”, “sssll”]

Return [[0, 1], [1, 0], [3, 2], [2, 4]]

The palindromes are [“dcbaabcd”, “abcddcba”, “slls”, “llssssll”]

思路:

x+y是Palindrome Pairs的條件是:

y+xleft+xright

或者 xleft+xright+y

y==xright and xleft 回文

y==xleft and xright回文

用hash table 來求解不會TLE

注意如果x和y都是回文,取x+y

class Solution(object):
    def palindromePairs(self, words):
        dic={}
        for i in range(len(words)):
            dic[words[i]]=i
        ret=[]
        for i in range(len(words)):
            x=words[i]
            for j in range(len(words[i])+):
                left=x[:j]
                right=x[j:]
                flag=dic.get(left[::-])
                if flag!=None and right==right[::-] and flag!=i:
                    ret.append([i,flag])
                flag=dic.get(right[::-])
                if flag!=None and left==left[::-] and flag!=i and j!=:
                    ret.append([flag,i])
        return ret