ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の文字列が回文になり得るかどうかを確認する

JavaScript の文字列が回文になり得るかどうかを確認する

WBOY
WBOY転載
2023-09-03 20:49:021286ブラウズ

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

JavaScript での文字列操作の世界を探索すると、特定の文字列を回文に変換できるかどうかを判断するという興味深い課題が明らかになります。同じ単語やフレーズが前後で読まれる回文には固有の魅力があり、その神秘的な特性を明らかにしようとする開発者の好奇心を刺激します。この記事では、JavaScript に固有の強力な言語機能とアルゴリズムを使用して、文字列が回文に変換できるかどうかをチェックする複雑さを明らかにするための啓発的な旅に乗り出します。文字列操作を掘り下げ、革新的な技術を採用することで、文字列を回文に変換する謎を解明し、それによって目の肥えた JavaScript 実践者としてのスキルを向上させます。

###問題文###

現在のタスクは、指定された文字列を 1 文字だけ削除するだけで回文に変換できるかどうかを効率的に判断できる JavaScript アルゴリズムを開発することです。回文は、前方または後方に読んでも変化しません。このアルゴリズムでは、入力文字列を徹底的に分析し、回文を作成する必要がある場合に個々の文字を削除するオプションを考慮しながら個々の文字を検査する必要があります。出力は、文字列を回文に変換できるかどうかを示すブール値になります。よりよく理解するために、次の例を考えてみましょう。

入力例

リーリー

出力例

リーリー は、最大 1 文字を削除することで文字列を回文に実際に変換できることを示します。

###方法###

この記事では、JavaScript で上記の問題を解決するためのさまざまな方法を見ていきます -

ダブルポインタ

    ######再帰######
  • 動的プログラミング

  • 方法 1: 2 つのポインター

  • JavaScript で文字列が回文になれるかどうかを確認するという一般的な問題は、2 ポインター法を使用して解決できます。これには、2 つのポインター (1 つは文字列の先頭に、もう 1 つは文字列の末尾に) を初期化し、これらのポインターの文字を比較し、それらを中央に向かって移動することが含まれます。これを実現するには、文字列を入力として受け取り、ポインターを初期化し、変数を変更する JavaScript 関数を定義します。次に、while ループを使用して文字を比較し、一致しない変更を追加し、それに応じてポインターを移動します。ループが終了したら、修飾が 1 以下であるかどうかを確認して、回文を形成できるかどうかを判断します。最後に、文字列から回文を作成できるかどうかを示すブール値が返されます。
  • ###例###

    canBePalindrome 関数は、最大 1 文字を削除することで文字列を回文にできるかどうかを確認します。 2 ポインターのアプローチを使用して文字列を反復処理し、文字を比較します。文字が等しい場合、両方のポインタが中心に向かって移動します。そうでない場合は、隣接する文字を比較して、文字を削除できるかどうかを確認します。文字が削除された場合は false を返します。 false を返さずにループが完了した場合は、true を返し、文字列が回文になる可能性があることを示します。下部の使用例は、この機能を示しています。

    リーリー ###出力###
  • 以下はコンソール出力です -
リーリー

方法 2: 再帰

JavaScript で再帰を使用して文字列を回文にできるかどうかを確認するには、入力文字列を受け入れる canBePalindrome() という関数を定義します。基本ケースでは、文字列の長さが 1 以下の場合に true を返します。それ以外の場合は、最初と最後の文字を比較し、更新された文字列を使用して canBePalindrome() を再帰的に呼び出し、それらが等しい場合は文字を削除します。このプロセスは、基本ケースに到達するまで繰り返されます。最初と最後の文字が等しくない場合は false を返します。最後に、入力文字列を使用して canBePalindrome() が呼び出され、結果が保存され、さらに処理を続行するか、結果に基づいて適切なメッセージが表示されます。

###例###

このコードでは、canFormPalindrome 関数は文字列を入力として受け入れ、その文字列が最大 1 文字を削除することで回文になる場合は true を返し、それ以外の場合は false を返します。 isPalindrome 関数は、部分文字列が回文であるかどうかをチェックするヘルパー関数です。

リーリー ###出力###

以下はコンソール出力です -

リーリー

方法 3: 動的プランニング

JavaScript で動的プログラミングを使用して文字列を回文に変換できるかどうかを確認するには、文字列を入力として受け取る canBePalindrome という関数を定義します。部分問題の結果を保存する動的プログラミング テーブルを作成します。 2 つのポインターを使用して文字列の両端から反復処理を行い、それらの位置にある文字を比較します。それらが同じ場合は、それに応じてポインタを移動します。異なる場合は、ポインター間の部分文字列がテーブル内で処理されているかどうかを確認します。そうでない場合は、部分文字列に対して canBePalindrome 関数が再帰的に呼び出され、結果が保存されます。左右のポインターから文字を除外することを検討し、どちらの場合も true を返す場合はテーブルを更新します。テーブルを更新した後、文字列全体を表すエントリに格納されている値を返し、回文に再配置できるかどうかを判断します。このアプローチでは、動的プログラミングを活用し、サブ問題に分解することで問題を効率的に解決します。

示例

在此代码中,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 作为编程语言的独创性和多功能性。

以上がJavaScript の文字列が回文になり得るかどうかを確認するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。