问题描述
有人可以告诉我该算法的时间和空间复杂度吗?基本上,该函数接受一个字符串,如果它是回文(向后与向前相同),则该函数必须返回true;否则,则必须返回false。
我认为两者都是 O(n),但是如果我错了,请纠正我。
function ispalindrome(string) {
var reversing = string.split("").reverse().join("")
return string === reversing
}
解决方法
您的函数在时间和空间上的复杂度为 O(string.length),因为它构造了一个字符数组,然后构造了一个新字符串,这些字符串的字符顺序相反,长度与原始字符串。比较这些字符串具有相同的时间复杂度。
但是请注意,这仅适用于单个单词,但不适用于完整的短语:可以双向使用相同字母但不一定具有相同间距读取的短语也是回文。
这是替代版本:
function isPalindrome(string) {
string = string.replace(/ /g,"");
var reverse = string.split("").reverse().join("");
return string === reverse;
}
此函数的时间和空间复杂度与 O(string.length)相同。