METHOD 1: Using built-in Reverse
Most straightforward but most inefficient, worst-case minimally a O(n) or O(n+k) linear time.
const isPalindrome = (str) => {
return str === [...str].reverse().join("");
};
METHOD 2: Using Decrementing For Loop
Not efficient as well, O(n) linear time
const isPalindrome = (str) => {
let newStr = "";
for (let i = str.length - 1; i >= 0; i--) {
newStr += str[i];
}
return str === newStr;
};
METHOD 3: Using Recursion
We can check the front and back of the str recursively from outer to inner elements.
const isPalindromeRec = (str) => {
const sLen = str.length;
if (sLen === 0 || sLen === 1) return true;
// check front & back recursively
if (str[0] === str[sLen - 1]) {
return isPalindromeRec(str.slice(1, sLen - 1));
}
return false;
};
METHOD 4: Using Loop to compare
Will be approximately twice more efficient than method 1 and 2, as we are only checking half the length.
const isPalindrome = (str) => {
const sLen = str.length;
for (let i = 0; i < sLen / 2; i++) {
if (str[i] !== str[sLen - 1 - i]) {
return false;
}
}
return true;
};
Top comments (0)