Answer
t.me/js_testОтвет:
function SingleCharacterChangePalindrome(str) {
const diff = [...str].reverse().filter((x, i) => x != str[i]).length;
return diff == 2 || (diff == 0 && str.length % 2 == 1);
}
Объяснение:
Можно заметить что данную задачу можно решить буквально в два шага, создаём переменную diff в которую с помощью методов массива кладём количество символов различных во входной строке и в этой же строке только отзеркаленной. Далее проверяем если diff равен двум - это значит что одну букву можно заменить и входная строка станет палиндромом, или если diff равен нулю, нужно проверить что количество букв в строке нечётное и можно менять символ по середине сколько угодно и каждый раз будет получаться палиндром.
Код для проверки:
function SingleCharacterChangePalindrome(str) {
const diff = [...str].reverse().filter((x, i) => x != str[i]).length;
return diff == 2 || (diff == 0 && str.length % 2 == 1);
}
console.log(SingleCharacterChangePalindrome("abba")); // false
console.log(SingleCharacterChangePalindrome("abbaa")); // true
console.log(SingleCharacterChangePalindrome("abbx")); // true
console.log(SingleCharacterChangePalindrome("aa")); // false
console.log(SingleCharacterChangePalindrome("ab")); // true
console.log(SingleCharacterChangePalindrome("abcba")); // true