zoukankan      html  css  js  c++  java
  • Leecode336

    Palindrome Pairs

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

    Example 1:
    Given words = ["bat", "tab", "cat"]
    Return [[0, 1], [1, 0]]
    The palindromes are ["battab", "tabbat"]

    Example 2:
    Given words = ["abcd", "dcba", "lls", "s", "sssll"]
    Return [[0, 1], [1, 0], [3, 2], [2, 4]]
    The palindromes are ["dcbaabcd", "abcddcba", "slls", "llssssll"]

    这个是一种思考思路:

     

    本来自己是写的C++版本,思考方向是挨个配对判断,奈何目前停留在运行错误阶段,,http://bookshadow.com/weblog/357/这个给出了python的解法:

    class Solution(object):
        def palindromePairs(self, words):
            """
            :type words: List[str]
            :rtype: List[List[int]]
            """
            wmap = {y : x for x, y in enumerate(words)}
            
            def isPalindrome(word):
                size = len(word)
                for x in range(size / 2):
                    if word[x] != word[size - x - 1]:
                        return False
                return True
    
            ans = set()
            for idx, word in enumerate(words):
                if "" in wmap and word != "" and isPalindrome(word):
                    bidx = wmap[""]
                    ans.add((bidx, idx))
                    ans.add((idx, bidx))
    
                rword = word[::-1]
                if rword in wmap:
                    ridx = wmap[rword]
                    if idx != ridx:
                        ans.add((idx, ridx))
                        ans.add((ridx, idx))
    
                for x in range(1, len(word)):
                    left, right = word[:x], word[x:]
                    rleft, rright = left[::-1], right[::-1]
                    if isPalindrome(left) and rright in wmap:
                        ans.add((wmap[rright], idx))
                    if isPalindrome(right) and rleft in wmap:
                        ans.add((idx, wmap[rleft]))
            return list(ans)
    

     c++留待继续改正。

  • 相关阅读:
    Java自学笔记(21):【IO】数据流,标准输入输出
    makefile 学习笔记
    tensorflow 环境搭建
    matlab
    【转】MATLAB各种矩阵生成函数
    leetcode刷题收获
    leetcode 15. 3Sum
    STL 记录
    leetcode 服务器环境
    visual studio 2017 使用笔记
  • 原文地址:https://www.cnblogs.com/vicki/p/5261905.html
Copyright © 2011-2022 走看看