merge: Add new IsPalindrome implementation (#1046)

This commit is contained in:
Andrea Tota
2022-06-16 18:58:59 +02:00
committed by GitHub
parent 85f428e826
commit 6b06b3a37f
2 changed files with 69 additions and 0 deletions

36
String/IsPalindrome.js Normal file
View File

@ -0,0 +1,36 @@
/**
* @function isPalindromeIterative
* @description isPalindromeIterative function checks whether the provided input is palindrome or not
* @param {String | Number} x - The input to check
* @return {boolean} - Input is palindrome or not
* @see [Palindrome](https://en.wikipedia.org/wiki/Palindrome)
*/
/*
* Big-O Analysis
* Time Complexity
- O(N) on average and worst case scenario as input is traversed in linear fashion
- O(N) on best case scenario, even when input has length of 1, because toString() method takes O(N)
* Space Complexity
- O(1)
*/
export function isPalindromeIterative (x) {
if (typeof x !== 'string' && typeof x !== 'number') {
throw new TypeError('Input must be a string or a number')
}
// Convert x to string whether it's number or string
const string = x.toString()
const length = string.length
if (length === 1) return true
// Apply two pointers technique to compare first and last elements on each iteration
for (let start = 0, end = length - 1; start < end; start++, end--) {
// Early return if compared items are different, input is not a palindrome
if (string[start] !== string[end]) return false
}
// If early return in condition inside for loop is not reached, then input is palindrome
return true
}