Die Zeichenfolge ist kein perfekter Palindrom (z. B. "RaceCar" sollte falsch zurückkehren).
Code: Select all
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"
Optimieren Sie für O (n) Zeit und O (1) Raum. /> Ich habe einen Zwei-Zeiger-Ansatz ausprobiert, der Fehlanpassungen zählt, aber es scheitert für Fälle, in denen das Überspringen eines Fehlpaarungsfehlers spätere Fehler versteckt: < /p>
Code: Select all
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
}
fällt für "ABC" fehl. Fälle gehandhabt (ungerade /sogar Längen, ein einzelnes Zeichen).
Code: Select all
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
}
console.log(isAlmostPalindrome("abca"));
console.log(isAlmostPalindrome("abc"));
console.log(isAlmostPalindrome("a"));
console.log(isAlmostPalindrome("abxa"));
console.log(isAlmostPalindrome("racecar"));