首页 > 解决方案 > 确定两个字符串是否是特定索引处的回文的算法

问题描述

给定两个长度相等的字符串 A 和 B,找出是否可以在相同的索引处拆分两个字符串,从而合并 A 的第一部分和 B 的第二部分形成回文。返回拆分的位置。回文是一个向后读和向前读相同的词。如果找不到解决方案,则返回 -1。

这是我到目前为止所拥有的

def palindrome(str1, str2):
    if len(str1) != len(str2):
        return None
    for i in range(len(str1)):
        firstStr = str1[i:]
        secondStr = str2[:i]
        if isPalindrome(firstStr+secondStr):
            return i
    return -1


def isPalindrome(s):
    return s == s[::-1]


print(palindrome('abcdefgh', 'dasedcba'))

我的解决方案返回-1测试用例,虽然它应该返回4

我不确定要更改什么以确保返回正确的索引。

标签: pythonstring

解决方案


根据您的问题,您想合并 A ( str1) 的第一部分和 B ( ) 的第二部分str2,但是在您的代码中,您正在做相反的事情,只需打开切片str1str2

firstStr = str1[:i]   # from the start up to i (first part of str1)
secondStr = str2[i:]  # from i to up the end (second part of str2)

测试:

def palindrome(str1, str2):
    if len(str1) != len(str2):
        return None
    for i in range(len(str1)):
        firstStr = str1[:i]
        secondStr = str2[i:]
        if isPalindrome(firstStr+secondStr):
            return i
    return -1

def isPalindrome(s):
    return s == s[::-1]

print(palindrome('abcdefgh', 'dasedcba'))

输出:

4

推荐阅读