【问题标题】:Time and Space Complexity of this Palindrome Algorithm?这个回文算法的时空复杂度?
【发布时间】:2020-09-25 20:50:53
【问题描述】:

谁能告诉我这个算法的时间和空间复杂度?基本上,该函数接受一个字符串,如果它是回文则该函数必须返回 true(向后与向前相同),否则返回 false。

我认为两者都是 O(n),但如果我错了,请纠正我。

function isPalindrome(string) {
    var reversing = string.split("").reverse().join("")
    return string === reversing
}

【问题讨论】:

  • 是的,两者都是 O(n)。
  • 好吧,我不确定 O(n) 复杂性在这里是否可见,因为您实际上并没有实现 算法。您宁愿使用 String API,其代码也不会在此处显示。因此,仅从这段代码来看,它是 constant.. 但由于内部调用正在完成 O(n) 的工作,它不是恒定的.. 但这从这个问题中并不明显。通常,当您对时空复杂度感到好奇时,请尝试自己实现算法(或查看实现)。
  • 我的意思是在幕后使用内置的 split、reverse 和 join 方法。
  • 那么最好提供您正在检查的代码。不是每个人都会打开他们的 IDE,下载源代码并查看引擎盖下的实现。无论如何,我的建议仍然有效 - 不要实现这样的算法......因为你实际上并没有在这里实现任何算法。
  • 另外,请始终添加您使用的语言的相应标签。

标签: algorithm time-complexity big-o palindrome space-complexity


【解决方案1】:

您的函数具有 O(string.length) 的时间和空间复杂度,因为它构造一个字符数组,然后构造一个新字符串,其中的字符以相反的顺序排列,长度与原始字符串。比较这些字符串具有相同的时间复杂度。

但是请注意,这适用于单个单词,但不适用于完整的短语:可以在两个方向上以相同字母阅读但间距不一定相同的短语也是回文。

这是一个替代版本:

function isPalindrome(string) {
    string = string.replace(/ /g, "");
    var reverse = string.split("").reverse().join("");
    return string === reverse;
}

这个函数的时间和空间复杂度和O(string.length)一样。

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 2014-08-26
    • 2019-10-08
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多