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