Answer

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

Report Page