mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 08:16:50 +08:00

* chore: Switch to Node 20 + Vitest * chore: migrate to vitest mock functions * chore: code style (switch to prettier) * test: re-enable long-running test Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime! see #1193 * chore: code style * chore: fix failing tests * Updated Documentation in README.md * Update contribution guidelines to state usage of Prettier * fix: set prettier printWidth back to 80 * chore: apply updated code style automatically * fix: set prettier line endings to lf again * chore: apply updated code style automatically --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
38 lines
1.4 KiB
JavaScript
38 lines
1.4 KiB
JavaScript
/**
|
|
* @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(1) on best case scenario if the input already is a string (otherwise toString() method takes O(N))
|
|
and the first & last characters don't match, triggering an early return
|
|
* 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
|
|
}
|