字典树-336. 回文对-PYTHON

在这里插入图片描述

利用逆置原有元素找搭配

  • 中间元素如果是回文元素,同时元素左边和右边互为逆置这样的字符串必定为回文,就是利用了这个原理进行
class Solution(object):
    def palindromePairs(self, words):
        """
        :type words: List[str]
        :rtype: List[List[int]]
        """
# 本身就是回文串单词
        palidStr = []
        # 翻转单词记录位置
        rev_words = {}
        # 结果
        res = []
        for idx, word in enumerate(words):
            rev_words[word[::-1]] = idx #利用列表推导式的形式进行逆置,同时利用赋值的方法规避掉“”的元素
            # 为了防止数组里有空字符串("")
            if word == word[::-1]:
                palidStr.append(idx)
        print(rev_words)
        for idx, word in enumerate(words):
            if word: 
                for i in range(len(word)): #0--N-1
                    left, right = word[:i], word[i:]
                    # print(left,right)
                    # 是否存在在单词左边加 使得成为回文串
                    if left == left[::-1] and right in rev_words and idx != rev_words[right]:
                        #当前单词左边是回文,右侧在翻转单词中,且当前单词不是查找出来的右侧翻转单词
                        print(left,right,idx,rev_words[right])
                        res.append([rev_words[right], idx])
                    # 同理
                    if right == right[::-1] and left in rev_words and idx != rev_words[left]:
                        res.append([idx, rev_words[left]])
            else:
                # 对于空字符串
                for loc in palidStr:
                    if loc != idx:
                        res.append([idx, loc])#空字符串可以与任意一个回文搭配
        return res
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值