LeetCode 336. Palindrome Pairs

Description

Given a list of unique words, find all pairs of distinct indices (i, j) in the given list, so that the concatenation of the two words, i.e. words[i] + words[j] is a palindrome.git

Example 1:github

Input: ["abcd","dcba","lls","s","sssll"]
Output: [[0,1],[1,0],[3,2],[2,4]]
Explanation: The palindromes are ["dcbaabcd","abcddcba","slls","llssssll"]
Example 2:數組

Input: ["bat","tab","cat"]
Output: [[0,1],[1,0]]
Explanation: The palindromes are ["battab","tabbat"]app

描述

給定一組惟一的單詞, 找出全部不一樣 的索引對(i, j),使得列表中的兩個單詞, words[i] + words[j] ,可拼接成迴文串。ui

示例 1:code

輸入: ["abcd","dcba","lls","s","sssll"]
輸出: [[0,1],[1,0],[3,2],[2,4]]
解釋: 可拼接成的迴文串爲 ["dcbaabcd","abcddcba","slls","llssssll"]
示例 2:索引

輸入: ["bat","tab","cat"]
輸出: [[0,1],[1,0]]
解釋: 可拼接成的迴文串爲 ["battab","tabbat"]ip

思路

  • 構建字典,字典的鍵爲單詞,值爲單詞的索引。
  • 遍歷每個單詞,對每個單詞進行切片,組成 prefix 和 subfix。
  • 若是 prefix 自己是迴文字符串,咱們檢查 subfix 的反轉是否在字典中,若是在,說明能夠構成一個知足題意的迴文字符串,咱們將該鍵的值,當前單詞的索引構成一個組合(注意順序)。
  • 若是 subfix 是一回文字符串,咱們檢查 prefix 的反抓是否在字典中,若是在,說明能夠構成一個知足題意的迴文字符串,咱們將當前單詞的索引,該鍵的值構成一個組個(注意順序)
  • 注意在檢查迴文字符串的時候,注意重複。
# -*- coding: utf-8 -*-
# @Author:             何睿
# @Create Date:        2019-04-06 12:11:30
# @Last Modified by:   何睿
# @Last Modified time: 2019-04-07 10:20:01


class Solution:
    def palindromePairs(self, words: [str]) -> [[int]]:
        # 結果數組
        result = []
        # 字典,用於獲取索引
        worddict = {word: i for i, word in enumerate(words)}
        for i, word in enumerate(words):
            count = len(word)
            for j in range(count + 1):
                # 獲取字段的前半部分,後半部分
                prefix, subfix = word[:j], word[j:]
                # 前半部分的反轉,後半部分的反轉
                reprefix, resubfix = prefix[::-1], subfix[::-1]
                # 若是前半部分是 palindrome 而且後半部分的反轉在字典中
                if prefix == reprefix and resubfix in worddict:
                    m = worddict[resubfix]
                    # 不能取到字符自己
                    if m != i: result.append([m, i])
                # 若是後半部分是迴文字符串,而且前半部分的逆序在字典中
                if j != count and subfix == resubfix and reprefix in worddict:
                    result.append([i, worddict[reprefix]])
        return result

源代碼文件在 這裏
©本文首發於 何睿的博客 ,歡迎轉載,轉載需保留 文章來源 ,做者信息和本聲明.utf-8

相關文章
相關標籤/搜索