码迷,mamicode.com
首页 > 其他好文 > 详细

【leetcode】336. Palindrome Pairs

时间:2018-09-01 12:33:01      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:重复   src   图片   情况   后缀   style   ret   enum   存在   

题目如下:

技术分享图片

解题思路:对于任意一个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

标签:重复   src   图片   情况   后缀   style   ret   enum   存在   

原文地址:https://www.cnblogs.com/seyjs/p/9569247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!