计算两个字符串在特定索引处是否为回文的算法

2024-06-23 03:06:03 发布

您现在位置:Python中文网/ 问答频道 /正文

给定两个长度相等的字符串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

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


Tags: 字符串nonelenreturnifdef情况解决方案
3条回答

您没有正确地获取第一个字符串的第一部分和第二个字符串的第二部分。请记住,当您剪切字符串时:

>>> s = 'abcdefgh'
>>> s[:4] # this will take the first 4 elements of s
'abcd'
>>> s[4:] # this will take a sub-string from the 5th element at index 4 until the end of s
'efgh'

因此,您应该更改代码:

def palindrome(str1, str2):
    if len(str1) != len(str2):
        raise ValueError('str1 and str2 should have the same length')
    for i in range(len(str1)):
        firstStr = str1[:i]
        secondStr = str2[i:]
        if isPalindrome(firstStr + secondStr):
            return i
    return -1

还要记住以下几点,如果两个字符串str1str2的长度不相同,则返回None,因此可以直接写入return,因为它隐式返回None。但是,我认为最好引发一个异常,告诉用户str1str2的长度不同。你知道吗

根据您的问题,您希望合并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

你也应该把你的话颠倒过来,然后用这种方式来检查:

反向单词=单词[::-1]

相关问题 更多 >

    热门问题