Heim  >  Artikel  >  Web-Frontend  >  Überprüfen Sie, ob eine Zeichenfolge in JavaScript ein Palindrom sein kann

Überprüfen Sie, ob eine Zeichenfolge in JavaScript ein Palindrom sein kann

WBOY
WBOYnach vorne
2023-09-03 20:49:021242Durchsuche

检查 JavaScript 中的字符串是否可以成为回文

Die Erkundung der Welt der String-Manipulation in JavaScript offenbart eine faszinierende Herausforderung: herauszufinden, ob ein bestimmter String in ein Palindrom umgewandelt werden kann. Palindrome, bei denen dasselbe Wort oder dieselbe Phrase auf der Vorder- und Rückseite gelesen wird, haben einen besonderen Reiz und wecken die Neugier von Entwicklern, die ihre mysteriösen Eigenschaften aufdecken möchten. In diesem Artikel begeben wir uns auf eine aufschlussreiche Reise, um die Komplexität der Überprüfung aufzudecken, ob eine Zeichenfolge mithilfe der leistungsstarken Sprachfunktionen und Algorithmen von JavaScript in ein Palindrom umgewandelt werden kann. Indem wir uns mit der String-Manipulation befassen und innovative Techniken einsetzen, lüften wir das Geheimnis der Umwandlung von Strings in Palindrome und verbessern so unsere Fähigkeiten als anspruchsvolle JavaScript-Praktiker.

Problemstellung

Die aktuelle Aufgabe besteht darin, einen JavaScript-Algorithmus zu entwickeln, der effizient bestimmen kann, ob eine bestimmte Zeichenfolge durch Entfernen nur eines Zeichens in ein Palindrom umgewandelt werden kann. Palindrome bleiben beim Vorwärts- und Rückwärtslesen unverändert. Der Algorithmus erfordert eine gründliche Analyse der Eingabezeichenfolge, wobei die einzelnen Zeichen untersucht werden und gleichzeitig die Möglichkeit in Betracht gezogen wird, einzelne Zeichen zu entfernen, wenn ein Palindrom erstellt werden muss. Die Ausgabe ist ein boolescher Wert, der angibt, ob die Zeichenfolge in ein Palindrom konvertiert werden kann. Zum besseren Verständnis betrachten wir das folgende Beispiel.

Beispieleingabe

"racecar"

Beispielausgabe

true

zeigt an, dass die Zeichenfolge tatsächlich in ein Palindrom umgewandelt werden kann, indem höchstens ein Zeichen entfernt wird.

Methode

In diesem Artikel werden wir verschiedene Möglichkeiten zur Lösung der oben genannten Probleme in JavaScript sehen -

  • Doppelte Hände

  • Rekursion

  • Dynamische Planung

Methode 1: Zwei Hinweise

Das häufige Problem der Überprüfung, ob eine Zeichenfolge in JavaScript ein Palindrom sein kann, kann mithilfe der Zwei-Zeiger-Methode gelöst werden. Dazu müssen zwei Zeiger initialisiert werden, einer am Anfang der Zeichenfolge und einer am Ende der Zeichenfolge, die Zeichen an diesen Zeigern verglichen und zur Mitte hin verschoben werden. Um dies zu erreichen, definieren Sie eine JavaScript-Funktion, die eine Zeichenfolge als Eingabe verwendet, Zeiger initialisiert und Variablen ändert. Verwenden Sie dann eine While-Schleife, um Zeichen zu vergleichen, nicht übereinstimmende Änderungen hinzuzufügen und den Zeiger entsprechend zu bewegen. Überprüfen Sie nach Ende der Schleife, ob die Änderungen kleiner oder gleich 1 sind, um festzustellen, ob ein Palindrom gebildet werden kann. Schließlich wird ein boolescher Wert zurückgegeben, der angibt, ob aus der Zeichenfolge ein Palindrom erstellt werden kann.

Beispiel

Die Funktion

canBePalindrome prüft, ob eine Zeichenfolge durch Entfernen von höchstens einem Zeichen in ein Palindrom umgewandelt werden kann. Es verwendet einen Zwei-Zeiger-Ansatz, um die Zeichenfolge zu durchlaufen und Zeichen zu vergleichen. Sind die Zeichen gleich, bewegen sich beide Zeiger zur Mitte hin. Wenn nicht, prüft es, ob ein Zeichen entfernt werden kann, indem benachbarte Zeichen verglichen werden. Gibt false zurück, wenn ein Zeichen entfernt wurde. Wenn die Schleife abgeschlossen wird, ohne „false“ zurückzugeben, wird „true“ zurückgegeben, was darauf hinweist, dass die Zeichenfolge zu einem Palindrom werden kann. Die Beispielverwendung unten demonstriert diese Funktionalität.

function canBePalindrome(str) {
   let left = 0;
   let right = str.length - 1;
   let removed = false;
 
   while (left < right) {
      if (str[left] !== str[right]) {
         if (removed) {
            return false; // Already removed a character, can't remove more
         }
         
         // Try removing either the character at the left or right pointer
         if (str[left + 1] === str[right]) {
            left++;
         } else if (str[left] === str[right - 1]) {
            right--;
         } else {
            return false; // Unable to make the string a palindrome by removing one character
         }
      
         removed = true;
      }   
      left++;
      right--;
   }
   return true; // The string can be made a palindrome by removing at most one character
}
 
// Example usage:
console.log(canBePalindrome("racecar")); // true
console.log(canBePalindrome("abccdba")); // true
console.log(canBePalindrome("abccba")); // true
console.log(canBePalindrome("abcdcba")); // true
console.log(canBePalindrome("abcddba")); // false
console.log(canBePalindrome("abcdefg")); // false

Ausgabe

Das Folgende ist die Konsolenausgabe -

true
true
true
true
true
false

Methode 2: Rekursion

Um zu überprüfen, ob Sie eine Zeichenfolge mithilfe der Rekursion in JavaScript in ein Palindrom umwandeln können, definieren Sie eine Funktion namens canBePalindrome(), die eine Eingabezeichenfolge akzeptiert. Im Basisfall wird „true“ zurückgegeben, wenn die Länge der Zeichenfolge kleiner oder gleich 1 ist. Vergleichen Sie andernfalls das erste und letzte Zeichen und rufen Sie canBePalindrome() rekursiv mit der aktualisierten Zeichenfolge auf, wobei Sie die Zeichen entfernen, wenn sie gleich sind. Dieser Vorgang wird wiederholt, bis der Basisfall erreicht ist. Gibt „false“ zurück, wenn das erste und das letzte Zeichen nicht gleich sind. Abschließend wird canBePalindrome() mit der Eingabezeichenfolge aufgerufen, speichert das Ergebnis und setzt die Verarbeitung fort oder zeigt basierend auf dem Ergebnis eine entsprechende Meldung an.

Beispiel

In diesem Code akzeptiert die Funktion canFormPalindrome eine Zeichenfolge als Eingabe und gibt „true“ zurück, wenn die Zeichenfolge durch Entfernen von höchstens einem Zeichen zu einem Palindrom werden kann, andernfalls gibt sie „false“ zurück. Die Funktion isPalindrome ist eine Hilfsfunktion, die prüft, ob ein Teilstring ein Palindrom ist.

function canFormPalindrome(str) {
   // Helper function to check if a substring is a palindrome
   function isPalindrome(left, right) {
      while (left < right) {
         if (str[left] !== str[right]) {
            return false;
         }
         left++;
         right--;
      }
      return true;
   }
 
   // Recursive function to check if the string can be made a palindrome
   function checkPalindrome(left, right) {
      if (left >= right) {
         return true; // Base case: single character or empty string
      }
 
      if (str[left] === str[right]) {
         return checkPalindrome(left + 1, right - 1); // Characters match, check inner substring
      }
 
      // Try removing either left or right character and check the remaining substring
      return isPalindrome(left + 1, right) || isPalindrome(left, right - 1);
   }
 
   // Call the recursive function starting from the endpoints of the string
   return checkPalindrome(0, str.length - 1);
}
 
// Example usage
console.log(canFormPalindrome("abcba")); // true
console.log(canFormPalindrome("abbca")); // true
console.log(canFormPalindrome("abcd")); // false

Ausgabe

Das Folgende ist die Konsolenausgabe -

true
true
false

Methode 3: Dynamische Programmierung

Um zu überprüfen, ob Sie mithilfe der dynamischen Programmierung in JavaScript einen String in ein Palindrom konvertieren können, definieren Sie eine Funktion namens canBePalindrome, die einen String als Eingabe akzeptiert. Erstellen Sie eine dynamische Programmiertabelle, um die Ergebnisse der Teilprobleme zu speichern. Durchlaufen Sie die Zeichenfolge von beiden Enden aus mit zwei Zeigern und vergleichen Sie die Zeichen an diesen Positionen. Wenn sie gleich sind, bewegen Sie den Zeiger entsprechend. Falls abweichend, prüfen Sie, ob der Teilstring zwischen den Zeigern in der Tabelle verarbeitet wurde. Wenn nicht, wird die Funktion canBePalindrome rekursiv für die Teilzeichenfolge aufgerufen und das Ergebnis gespeichert. Erwägen Sie den Ausschluss von Zeichen aus den linken und rechten Zeigern und aktualisieren Sie die Tabelle, wenn einer der beiden Fälle „true“ zurückgibt. Geben Sie nach dem Aktualisieren der Tabelle den im Eintrag gespeicherten Wert zurück, der die gesamte Zeichenfolge darstellt, um festzustellen, ob sie in ein Palindrom neu angeordnet werden kann. Dieser Ansatz löst Probleme effizient, indem er dynamische Programmierung nutzt und sie in Teilprobleme zerlegt.

示例

在此代码中,canFormPalindrome 函数将字符串 str 作为输入,并返回一个布尔值,指示该字符串是否可以通过最多删除一个字符来使该字符串成为回文。该函数使用动态规划表dp来存储中间结果并检查str的所有可能的子串。最后,如果整个字符串可以成为回文,则返回 true,否则返回 false。

function canFormPalindrome(str) {
   const n = str.length;
 
   // Create a 2D dynamic programming table
   const dp = Array(n)
   .fill(false)
   .map(() => Array(n).fill(false));
 
   // Initialize the diagonal to true
   for (let i = 0; i < n; i++) {
      dp[i][i] = true;
   }
 
   // Fill the table diagonally
   for (let len = 2; len <= n; len++) {
      for (let i = 0; i < n - len + 1; i++) {
         const j = i + len - 1;
    
         if (str[i] === str[j]) {
         
            // Characters at the current indices are equal
            dp[i][j] = dp[i + 1][j - 1];
         } else {
         
            // Try removing either the character at index i or j
            dp[i][j] = dp[i + 1][j] || dp[i][j - 1];
         }
      }
   }
 
   // Return true if the whole string can be made a palindrome by removing at most one character
   return dp[0][n - 1];
}
 
// Example usage:
const str = "abca";
const canBePalindrome = canFormPalindrome(str);
console.log(canBePalindrome); 

输出

以下是控制台输出 -

true

结论

总之,确定字符串是否可以使用 JavaScript 转换为回文的过程是一个多方面的工作。通过利用各种字符串操作技术并采用系统方法,人们可以有效地确定实现回文对称的可行性。对字符频率的细致评估以及不常见字符串算法的利用可以带来令人着迷的见解和创造性的解决方案。从事这种智力追求使程序员能够深入研究语言操作的复杂性,从而对语言领域进行令人满意的探索。最终,识别字符串中回文潜力的能力证明了 JavaScript 作为编程语言的独创性和多功能性。

Das obige ist der detaillierte Inhalt vonÜberprüfen Sie, ob eine Zeichenfolge in JavaScript ein Palindrom sein kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen