【问题标题】:Palindrome coding and logic回文编码和逻辑
【发布时间】:2020-03-25 16:04:46
【问题描述】:

当调查一个字符串是否是回文时,我不能只取反转字符串的倒数吗?我的代码有什么问题?

def reverse(s):
    return s[::-1]

def isPalindrome(s):
    if (s == reverse(reverse(s))):
        return True
else:
    return False

【问题讨论】:

  • 为什么你认为你的代码有问题?

标签: string logic


【解决方案1】:

reverse(reverse(s)) 始终等于 s。你想检查s是否等于reverse(s)

def is_palindrome(s):
    return s == reverse(s)

【讨论】:

    【解决方案2】:

    这取决于您的目标是什么。如果您只想实现逻辑,那么您的版本就可以工作(但您仍然需要在那里纠正您的错误,它是if (s == reverse(s)),而不是反转反转的版本);但是,如果这是你在编程面试中给你的任务,那么你就没有真正做对,因为:

    1. 您正在使用完整的 API 调用来反转字符串(因此您没有实现 isPalindrome);
    2. 你的版本的时间复杂度会比你的版本差很多 isPalindrome 算法本身的复杂性。

    【讨论】:

    • 最优isPalindrome的时间复杂度仍然是O(n),所以假设reverse()的合理实现,时间复杂度将保持不变。
    • @sevko 我不会说它仍然是 O(n)。如果由各自的算法实现,它是 Θ,并且 O 都是 n/2。
    • @LeeHongwei,考虑一下您的情况,正如我在答案中提到的那样。您的代码编写方式没有显示算法实现.. 它是相当原生的 API 调用,但 isPalindrome 算法在一个好的算法实现中总是需要 n/2 。另外,如果我的回答对你有帮助,你可以点赞,如果它回答了你的问题,你也可以接受。
    • @GiorgiTsiklauri O() 通常用于人们真正指的是 Θ() 的地方,尤其是在 SO 上。此外,Θ(n/2) = Θ(n)。常数因素无关紧要。
    • @sevko 一点也不。用 O,人们从不指 Θ,至于大多数算法,这两个是完全不同的度量。您可以谷歌搜索复杂性,例如排序算法。在isPalindrome 算法中,您不需要遍历整个输入 1 到 n,但您是对的,运行时间会随着 n 的增加而相应增加。但是,这不是 1-1 关系。
    猜你喜欢
    • 2017-11-02
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多