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;
let compareArr = new Array();
let forwardArr = new Array();
let backwardArr = new Array();
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--;
}
console.log(str);
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 <= halfStr; 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")
if(str.length !== 3) {
char2 = str[j+1];
}
forwardArr.push(char2);
} else if (leftPtr2 == i) {
console.log("Left Pointer2 == i")
backChar2 = str[leftPtr2-1];
backwardArr.push(backChar2);
} else {
forwardArr.push(char2);
backwardArr.push(backChar2);
}
//let hhgf = halfStr - 1;
//console.log("halfStr-1): " + hhgf)
if (j == halfStr-1 && str.length != 3) {
console.log(forwardArr);
console.log(backwardArr);
//console.log("J: " + j + " halfStr: " + halfStr + " LeftPtr: " + leftPtr);
for (let letter in forwardArr) {
compareArr.push(forwardArr[letter]);
}
for (let k = backwardArr.length-1; k >= 0; k--) {
// for (let letter2 in backwardArr) {
//compareArr.push(backwardArr[letter2]);
compareArr.push(backwardArr[k]);
}
let compareStr = compareArr.join("");
console.log("Compare Arr: " + compareArr);
console.log("Compare Str: " + compareStr);
let rev = "";
// generate a reverse string using a reverse for loop.
for(let l = compareStr.length - 1; l >= 0; l--) {
rev += compareStr[l];
}
console.log("Reverse: " + rev)
if (rev === compareStr) {
return true;
}
}
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("abca")) //true
//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("eedede")) //true
//console.log(isAlmostPalindrome("abc")) //false
//console.log(isAlmostPalindrome("A man, a plan, a canal: Padama")) //false