var isAlmostPalindrome = function(s) {
let str = s.replace(/[^A-Za-z0-9]/g, '').toLowerCase();
let sLen = str.length -1;
let forwards = true;
let backwards = true;
for (let i = 0; i < sLen; i++) {
let char = str[i];
let backChar = str[sLen - i];
if (char !== backChar) {
let sHalf = Math.floor(str.length / 2);
for (let j = 0; j < sLen; j++) {
let char2 = str[j];
let rightPtr = sLen - j;
let backChar2 = str[rightPtr];
console.log("Char2: " + char2 + " BackChar2: " + backChar2);
if (char2 != backChar2) {
console.log("J: " + j + " I: " + i);
if (j == i) {
console.log("I: " + i);
char2 = str[j+1];
if (char2 !== backChar2) {
console.log("forwards = false")
forwards = false;
char2 = str[j];
backChar2 = str[rightPtr - 1];
console.log("char2: " + char2 + " backChar2: " + backChar2)
if (char2 !== backChar2) {
backwards = false;
}
}
}
}
if (j == sHalf || rightPtr == sHalf) {
if (backwards == true || forwards == true) {
console.log("J: " + j + " sHalf: " + sHalf + " rightPtr: " + rightPtr)
return true;
} else {
return false;
}
}
rightPtr--;
}
}
}
//console.log(ptrArr);
return true;
}
//console.log(isAlmostPalindrome("A man!, a plan, a canal: Panada")) //false
//console.log(isAlmostPalindrome("A man!, a plan, a canal: Panama")) //true
//console.log(isAlmostPalindrome("race a car")) //true
//console.log(isAlmostPalindrome("abca"))
console.log(isAlmostPalindrome("eeccccbebaeeabebccceea"))
//console.log(isAlmostPalindrome("abccdba")) //true
//console.log(isAlmostPalindrome("abcdefdba")) //false !
//console.log(isAlmostPalindrome("")) //true !
//console.log(isAlmostPalindrome("a")) //true !
//console.log(isAlmostPalindrome("ab")) //true
//console.log(isAlmostPalindrome("A man, a plan, a canal: Padama")) //false