forked from neetcode-gh/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
125-Valid-Palindrome.js
36 lines (27 loc) · 842 Bytes
/
125-Valid-Palindrome.js
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
/**
* https://leetcode.com/problems/valid-palindrome/
* Time O(N) | Space O(1)
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
if (!s.length) return true;
s = s.toLowerCase();
return isValid(s);
};
const isValid = (s) => {
let [ left, right ] = [ 0, (s.length - 1) ];
while (left < right) {
while ((left < right) && isNonAlphaNumeric(s[left])) left++;
while ((left < right) && isNonAlphaNumeric(s[right])) right--;
const isSame = s[left] === s[right];
if (!isSame) return false;
left++; right--;
}
return true;
}
const isNonAlphaNumeric = (char) => {
const isNonAlpha = char < 'a' || 'z' < char; // a(97) - z(122)
const isNonNumeric = char < '0' || '9' < char; // 0(48) - 9(57)
return isNonAlpha && isNonNumeric;
};