>백엔드 개발 >PHP 튜토리얼 >가장 긴 공통 접두사의 길이 찾기

가장 긴 공통 접두사의 길이 찾기

Susan Sarandon
Susan Sarandon원래의
2024-09-24 22:15:14438검색

Find the Length of the Longest Common Prefix

3043。最長の共通プレフィックスの長さを求める

難易度:

トピック: 配列、ハッシュ テーブル、文字列、トライ

正の整数 arr1 と arr2 を持つ 2 つの配列が与えられます。

正の整数の 接頭辞 は、左端 の桁から始まる 1 つ以上の桁で形成される整数です。たとえば、123 は整数 12345 の接頭辞ですが、234 は ではありません.

2 つの整数 a と b の

共通接頭辞 は整数 c であり、c は a と b の両方の接頭辞になります。たとえば、5655359 と 56554 には共通のプレフィックス 565 がありますが、1223 と 43456 には共通のプレフィックスがありませんx が arr1 に属し、y が arr2 に属するような、整数のすべてのペア (x, y) の間で

最長の共通プレフィックス

の長さを見つける必要があります。 すべてのペアの

最長

の共通プレフィックスの長さを返します。それらの間に共通のプレフィックスが存在しない場合は、0. を返します。

例 1:

    入力:
  • arr1 = [1,10,100]、arr2 = [1000]
  • 出力:
  • 3
  • 説明:
  • 3 つのペア (arr1[i]、arr2[j]) があります。 (1, 1000) の最も長い共通プレフィックスは 1 です。
    • (10, 1000) の最も長い共通プレフィックスは 10 です。
    • (100, 1000) の最も長い共通プレフィックスは 100 です。
    • 最も長い共通プレフィックスは 100、長さは 3 です。
例 2:

    入力:
  • arr1 = [1,2,3]、arr2 = [4,4,4]
  • 出力:
  • 4
  • 説明:
  • どのペア (arr1[i]、arr2[j]) にも共通のプレフィックスが存在しないため、0 を返します。 同じ配列の要素間の共通の接頭辞はカウントされないことに注意してください。
制約:

1 4
  • 1 8
  • ヒント:

    arr1 の各要素の可能なプレフィックスをすべて HashSet に入れます。
    1. arr2 の各要素のすべての可能なプレフィックスについて、それが HashSet に存在するかどうかを確認します。
    解決策:

    HashSet を利用して 1 つの配列からプレフィックスを保存し、2 番目の配列でそれらのプレフィックスをチェックできます。

    アプローチ:

    1. プレフィックスの生成

      : arr1 と arr2 の各数値に対して、可能なすべてのプレフィックスを生成します。プレフィックスは、左端の数字から始まる 1 つ以上の数字で形成されます。

    2. arr1 のプレフィックスをセットに保存する

      : HashSet を使用して数値のすべてのプレフィックスを arr1 に保存すると、arr2 からのプレフィックスをチェックするときに高速な検索が保証されます。

    3. 最長の共通プレフィックスの検索

      : arr2 の各番号について、そのプレフィックスを生成し、これらのプレフィックスのいずれかが手順 2 の HashSet に存在するかどうかを確認します。見つかった最長のプレフィックスを追跡します。

    4. 最長の共通プレフィックスの長さを返す

      : 共通プレフィックスが見つかった場合は、その長さを返します。それ以外の場合は 0 を返します。

    5. このソリューションを PHP で実装してみましょう:
    3043。最長の共通プレフィックスの長さを求める


    説明:
    <?php
    /**
     * @param Integer[] $arr1
     * @param Integer[] $arr2
     * @return Integer
     */
    function longestCommonPrefix($arr1, $arr2) {
        ...
        ...
        ...
        /**
         * go to ./solution.php
         */
    }
    
    // Example usage:
    $arr1 = [1, 10, 100];
    $arr2 = [1000];
    echo longestCommonPrefix($arr1, $arr2); // Output: 3
    
    $arr1 = [1, 2, 3];
    $arr2 = [4, 4, 4];
    echo longestCommonPrefix($arr1, $arr2); // Output: 0
    ?>
    

    1. ハッシュセットの作成

      :

      最初に連想配列 $prefixSet を作成し、arr1 内の数値の可能なすべての接頭辞を保持します。
      • arr1 内の各数値を反復処理し、文字列に変換し、substr 関数を使用してそのすべてのプレフィックスを抽出します。各プレフィックスは $prefixSet に保存されます。
    2. プレフィックスチェック

      :

      次に、arr2 内の各数値をループし、同様に文字列に変換します。
      • arr2 の各数値について、考えられるすべてのプレフィックスを再度抽出します。
      • $prefixSet にプレフィックスが存在する場合、その長さが現在見つかっている最大長 ($maxLength) より大きいかどうかを確認します。
    3. 結果を返す

      :

      最後に、見つかった最も長い共通プレフィックスの長さを返します。
    4. 複雑:

      時間計算量
    • : O(n * m) ここで、n と m はそれぞれ arr1 と arr2 の長さです。これは、すべての数値とそのプレフィックスを処理しているためです。
    • 空間複雑度
    • : O(p) ここで、p は HashSet に格納されているプレフィックスの総数です。
    • このソリューションは効率的であり、指定された制約内でうまく機能します。

    連絡先リンク

    이 시리즈가 도움이 되었다면 GitHub에서 저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 여러분의 지원은 저에게 큰 의미가 될 것입니다!

    이렇게 더 유용한 콘텐츠를 원하시면 저를 팔로우해주세요.

    • 링크드인
    • 깃허브

    위 내용은 가장 긴 공통 접두사의 길이 찾기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.