您的位置:首页 > 大数据 > 人工智能

leetcode336. Palindrome Pairs

2016-07-07 16:22 495 查看
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])+1):
left=x[:j]
right=x[j:]
flag=dic.get(left[::-1])
if flag!=None and right==right[::-1] and flag!=i:
ret.append([i,flag])
flag=dic.get(right[::-1])
if flag!=None and left==left[::-1] and flag!=i and j!=0:
ret.append([flag,i])
return ret
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode