【leetcode】336. Palindrome Pairs
阿新 • • 發佈:2018-09-01
進行 一是 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中的情況,這裏要少判斷一位,避免出現重復的組合 forj 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