Строка не является идеальным палиндром (например, «гоночный автомобиль» должен вернуть false). < /P>
можно превратить в палиндром, изменяя именно один символ (например, «Abca» → Изменить 'C' на 'b'). < /P>
Код: Выделить всё
Examples:
Input Output Reason
"abca" True Change 'c' → 'b' to get "abba"
"abc" False Needs ≥2 changes (e.g., "aba" or "cbc")
"a" False Already a palindrome (no mismatch)
"abxa" True Change 'x' → 'b' to get "abba"
[*] Оптимизировать для O (n) времени и O (1) пространство.
[*] Предположим, что символы ASCII (но unicode Insights приветствуют). /> Я попробовал двух указательный подход, подсчитывая несоответствия, но в случае пропуски несоответствия скрывается ошибки: < /p>
Код: Выделить всё
function isAlmostPalindrome(s) {
let mismatches = 0;
let left = 0, right = s.length - 1;
while (left < right) {
if (s[left] !== s[right]) {
mismatches++;
if (mismatches > 1) return false;
}
left++;
right--;
}
return mismatches === 1; // Rejects perfect palindromes
}
не удастся для "ABC" (возвращает истинно неверно; требуется 2 изменения).
желаемый ответ:
- поправочный ответ. /> Обработанные случаи краев (нечетная/четная длина, одиночный символ).
Подробнее здесь: https://stackoverflow.com/questions/797 ... r-mismatch
Мобильная версия