1. 程式人生 > >【leetcode】336. Palindrome Pairs

【leetcode】336. Palindrome Pairs

進行 一是 turn 避免 object pen pass clas {}

題目如下:

技術分享圖片

解題思路:對於任意一個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

【leetcode】336. Palindrome Pairs