forked from TheAlgorithms/JavaScript
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIsPalindrome.js
More file actions
Latest commit
37 lines (32 loc) · 1.37 KB
/
Copy pathIsPalindrome.js
File metadata and controls
37 lines (32 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
* @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)
*/
exportfunctionisPalindromeIterative(x){
if(typeofx!=='string'&&typeofx!=='number'){
thrownewTypeError('Input must be a string or a number')
}
// Convert x to string whether it's number or string
conststring=x.toString()
constlength=string.length
if(length===1)returntrue
// Apply two pointers technique to compare first and last elements on each iteration
for(letstart=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])returnfalse
}
// If early return in condition inside for loop is not reached, then input is palindrome
returntrue
}