My First Attempt
/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
let n = s.toLowerCase().replace(/[^a-z]/g, '');
if (n.length % 2 === 0){
let firstHalf = n.slice(0, n.length / 2)
let arr = firstHalf.split("")
arr.reverse()
let arr2 = arr.join("")
console.log(arr2)
if (arr2 === n.slice(n.length/2, n.length)){
return true
}
} else {
let firstHalf = n.slice(0, (n.length-1) / 2)
let arr = firstHalf.split("")
arr.reverse()
let arr2 = arr.join("")
if (arr2 === n.slice((n.length - 1)/2 + 1, n.length)){
return true
}
}
return false
};
Very close! Far from eloquent, but for me, eloquence comes easiest with iteration. I was quick to index in on the problem, which was the the description asks for alphanumeric parsing, and I only did the alpha part of that.
Unfortunately, I made a silly mistake, and hastily replaced my a-z
to a-z1-9
, not even noticing that of course 0
is omitted from that range. So…very quickly fixed it, but then wasted 7 minutes in realizing how my fix was inadequate. I THEN preceded to almost rewrite the second half of the entire algorithm, not even thinking about how this is actually an even case anyways.
Second Attempt
I returned to this really hungry to understand the basics of regex so I went into it here Regex Baby Steps. After playing around a bit, I got this:
function isPalindrome(s: string): boolean {
const str = s.replace(/[\W_]+/g, '').toLowerCase()
const backwards = str.split('').reverse().join('')
return str === backwards
};
Let me go back and see how it compares to the previous iteration.
checks previous code
Oh dear god that’s awful. Cool! making progress!