var isAlmostPalindrome = function(s) {
const str = s.replace(/[^A-Za-z0-9]/g, '').toLowerCase();
let leftPtr = str.length - 1;
let ptrArr = new Object();
let forwardsPalindrome = true;
let boolbackwardsPalindrome = true;
for (let i = 0; i < str.length; i++) {
let char = str[i];
let backChar = str[leftPtr];
if (char !== backChar) {
ptrArr[i] = char;
ptrArr[leftPtr] = backChar;
}
leftPtr--;
}
if (JSON.stringify(ptrArr) !== '{}') {
console.log(ptrArr);
for(let prop in ptrArr) {
//console.log(prop);
leftPtr = str.length - 1;
for (let i = 0; i < str.length; i++) {
let char = str[i];
let backChar = str[leftPtr];
//console.log("Char: " + char + " Back: " + backChar)
if (char !== backChar) {
//console.log("Char: " + char + " Back: " + backChar + " I: " + i + " LeftPointer: " + leftPtr)
console.log(" I: " + i + " Prop: " + prop)
if (i == prop) {
console.log(str);
let leftPtr2 = str.length - 1;
let halfStr = Math.floor(str.length / 2);
console.log("halfStr: " + halfStr);
for (let j = 0; j < str.length; j++) {
let char2 = str[j];
let backChar2 = str[leftPtr2];
console.log("Char: " + char2 + " Back: " + backChar2 + " J: " + j + " LeftPointer: " + leftPtr2)
if (j == i) {
console.log("j == i")
char2 = str[j+1];
if (char2 !== backChar2) {
console.log(" Char: " + char2 + " BackChar: " + backChar2 + " j: " + j + " I: " + i)
//return false;
forwardsPalindrome = false;
}
} else if (leftPtr2 == i) {
console.log("Left Pointer2 == i")
backChar2 = str[leftPtr2-1];
if (char2 !== backChar2) {
console.log(" Char: " + char2 + " BackChar: " + backChar2 + " Left Pointer2: " + leftPtr2 + " I: " + i)
//return false;
backwardsPalindrome = false;
}
}
if (i == halfStr || backChar2 == halfStr) {
if (forwardsPalindrome == false && backwardsPalindrome == false) {
return false;
}
}
/**/
leftPtr2--;
}
}
}
leftPtr--;
}
//return false;
}
}
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("abccdba")) //true
//console.log(isAlmostPalindrome("abcdefdba")) //false !
//console.log(isAlmostPalindrome("")) //true
//console.log(isAlmostPalindrome("a")) //true
console.log(isAlmostPalindrome("ab")) //true