leetcode336. Palindrome Pairs
Posted seyjs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode336. Palindrome Pairs相关的知识,希望对你有一定的参考价值。
题目如下:
解题思路:对于任意一个word,要找出在wordlist中是否存在与之能组成回文的其他words,有两种思路。一是遍历wordlist;二是对word本身进行分析,找出能组成回文的words,并判断是否存在于wordlist中。显然,第二种思路比较的次数要少很多。怎么找出能组成回文的words呢?只要把后面的字符依次往前复制,并判断是否为回文,直到全部字符复制完成为止,这就能得到所有能与之组成回文的words。以abcd作为前缀为例,首先把d复制到abcd前面得到dabcd,接下来依次是dcabcd,dcbabdc,dcbaabcd。其中dcbabdc和dcbaabcd是回文,再判断dcb 和 dcba 是否存在于wordlist中即可;同理,abcd作为后缀是一样的。
代码如下:
class Solution(object): def isPalindrome(self,s): return s == s[::-1] def palindromePairs(self, words): dic = {} for i,v in enumerate(words): dic[v] = i res = [] for i,v in enumerate(words): if v == \'ab\': pass subs = \'\' for j in v[::-1]: subs += j if subs in dic and dic[subs] != i and self.isPalindrome(subs + v): res.append([dic[subs],i]) subs = \'\' #考虑abcd和dcbd都存在于list中的情况,这里要少判断一位,避免出现重复的组合 for j in v[:-1]: subs = j + subs if subs in dic and dic[subs] != i and self.isPalindrome(v + subs): res.append([i,dic[subs]]) # space,空能与其他本身就回文word组成回文word,这里单独考虑 space = \'\' if space in dic and dic[space] != i and self.isPalindrome(v): res.append([dic[space],i]) res.append([i,dic[space]]) return res
以上是关于leetcode336. Palindrome Pairs的主要内容,如果未能解决你的问题,请参考以下文章
leetcode No336. Palindrome Pairs
leetcode No336. Palindrome Pairs