指定された文字列内の一致する部分文字列を正確に計算する機能は、開発者がテキスト データを効率的に分析および操作できるため、JavaScript プログラミングの重要なスキルです。この記事では、文字列操作の世界を詳しく掘り下げ、一連のあまり知られていない手法を使用して、JavaScript で一致する部分文字列を計算する複雑さを探ります。基礎となるロジックを明確にし、これらの型破りな方法を採用することで、開発者は特定の部分文字列の出現を効率的にカウントする方法をより深く理解し、テキスト データから有意義な洞察を抽出できるようになります。この感動的な旅に参加して、JavaScript の潜在能力を解き放ち、豊富な語彙を拡張して一致する部分文字列を計算する技術を習得しましょう。
###問題文###
指定された文字列のサブシーケンスを計算し、「str」という名前の文字列入力と「arr」という名前の文字列入力の配列を受け取る JavaScript 関数が必要です。目的は、「arr」の各要素を調べて、「str」のサブシーケンスである文字列の数を判断することです。サブシーケンスは、残りの文字の相対的な順序を維持しながら、元の文字列から文字を削除することによって形成される文字列です。関数は、「arr」と「str」の各要素を慎重に比較し、「str」から文字を削除することで構築できるかどうかを判断する必要があります。次に、「str」内で見つかった修飾されたサブシーケンスの数を表す整数を返します。
入力例 -
リーリー
出力例 -
str = 'abracadabra';
arr = ['a', 'bra', 'cad', 'dab'];
ログイン後にコピー
出力の説明 -
指定された入力では、文字列 "str" は "abracadabra" で、配列 "arr" には ['a', 'bra', 'cad', 'dab'] が含まれています。
「arr」の各要素を分析すると、「a」、「bra」、「cad」、「dab」はすべて「str」の部分列であることがわかります。したがって、サブシーケンスのカウントは 4 となり、これが予想される出力です。
###方法###
この記事では、JavaScript で上記の問題を解決するためのさまざまな方法を見ていきます -
ブルートフォースクラッキング手法
ダブルポインタ方式
-
方法 1: ブルート フォース クラッキング
有効なサブシーケンスを計算する総当り的な方法には、文字列のすべての可能なサブシーケンスを生成し、配列内にそれらのサブシーケンスが存在するかどうかを確認することが含まれます。各文字列を反復処理して、再帰的にサブシーケンスを生成するか、ビットごとの演算を使用して、それらを配列要素と比較します。カウンタはゲームごとに増分され、合計カウントが得られます。この方法は入力が大きいと計算コストが高くなるため、動的プログラミングなどの代替アルゴリズムがより最適なソリューションを提供します。
###例###
このコードは、文字列の配列 (arr) 内の指定された文字列 (str) のサブシーケンスの数をカウントする再帰アルゴリズムを実装します。 countSubsequences 関数は、有効なサブシーケンスを追跡するために count 変数を初期化します。 generateSubsequences 関数は、入力文字列を反復処理し、各サブシーケンスが配列内に存在するかどうかを確認することにより、考えられるすべてのサブシーケンスを生成します。再帰呼び出しは、文字を含めたり除外したりするさまざまな可能性を探るために行われます。 main 関数呼び出しは、文字列の先頭から始まるサブシーケンスを生成します。 count 変数が最終結果として返されます。使用例では、サンプル文字列および文字列配列を使用したこの関数の使用法を示します。結果は保存され、コンソールに出力されます。
リーリー
###出力###
以下はコンソール出力です -
リーリー
方法 2: 2 ポインターによる方法
このアルゴリズムは、配列内の各文字列を反復処理し、2 つのポインターを使用します。1 つは指定された文字列に指定され、もう 1 つは現在検査されている文字列に指定されます。これらのポインタは、最初は対応する文字列の開始文字に位置し、いずれかの文字列の終わりに到達するまで前方に進みます。有効なサブシーケンスが決定されるたびに、数値インジケーターが増分されます。最後に、アルゴリズムは最終結果としてインジケーターの数値を提供します。
###例###
関数 countValidSubsequences は、文字列配列 (arr) とターゲット文字列 (target) をパラメーターとして受け取ります。 arr 内の各文字列を反復処理し、ネストされたループを使用してその文字を target 内の文字と比較します。文字が一致する場合はインデックスが増分され、一致しない場合はターゲットのインデックスのみが増分されます。文字列全体が有効なサブシーケンスである場合、カウントは増加します。 arr 内のすべての文字列を反復処理した後、関数は最終的なカウントを返します。
リーリー
###出力###
以下はコンソール出力です -
リーリー
###結論は###
最終的に、JavaScript での一致する部分文字列のカウントの調査により、このタスクを効率的に実行するために使用できる多くの賢いテクニックが明らかになりました。さまざまなアルゴリズムを採用し、言語のめったに使用されない機能を活用することで、プログラマーはエレガントでリソース豊富なソリューションを設計できます。部分文字列の照合は複雑であるため、特殊なケースや潜在的なパフォーマンスへの影響を慎重に考慮する必要があることを認識する必要があります。ただし、これらの新たな洞察を利用すると、開発者は従来のアプローチを超えて、JavaScript の可能性を最大限に活用して、部分文字列を巧みに列挙して操作できるようになります。全体として、この記事で共有される深い知識により、プログラマはコーディング能力を向上させ、JavaScript での部分文字列カウントの新たな次元を解き放つことができます。
以上がJavaScript で一致する部分文字列を計算するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。