[567] LeetCode列配列され

ここでは、ライトカスタムディレクトリのタイトル

文字列の配列LeetCode567

タイトル説明は
s1と配置され含まれていS2に決定するために二つの文字列s1とs2、書き込み機能を与えられました。

換言すれば、第一の配列の一つは2番目の文字列の文字列の部分文字列です。

例1:

入力:S1 = "AB"、S2 = "eidbaooo"
出力:真の
説明:( "BA")のうちの1つを含む、S2、S1の配置を。

例2:

入力:S1 = "AB"、S2 = "eidboaoo"
出力:偽
注:

入力文字列が小文字のみを含んでいる
2つの文字列の間の長さは、[1は、10,000]
トップ
タイトルの分析
  1.この質問は、私たちはスライディングウィンドウアルゴリズムを使用して、アイデアは一般的に、これは次のとおりです。

まず、文字列の可能性は、S1階乗その長さに配置されるべき文字列の長さが10000であり得るので、全ての配置がそう見つけることです。我々は興味の形で配置されていないアイデアを、変換することができ、そのようなAABなどの配置関係における要素の数は、その後、関係の数に換算長さS1が3であるので、我々ように、{1:2、B}ウィンドウの長さはまた、我々は発生数とS2の行のウィンドウが2である見つけるそうであれば、3であり、Bは、次いで、S2、S1が構成に含まれるものです。

2.スライディングウィンドウああとは何ですか?

アレイ内のウィンドウは、E iは〜であるように、ここでスコープとして、範囲への注力を表し、
ここに画像を挿入説明
  タイムリーな平均スライディング、このウィンドウは移動しますが、同じの窓の大きさは、そのようなこの時間の右側のスライドのように、電子の意志左、dが追加されます。
ここに画像を挿入説明

3.再度、質問を理解するために来ますか?

我々は、配置の形態に関係ない、と言うが、このようなAABなどの配置関係における要素の数は、その後、関係の数に換算長さS1は、我々の窓ので、3であるため、{1:2、B}長さはまた、我々は発生数とS2の行のウィンドウが2である見つけるそうであれば、3であり、Bは、次いで、S2、S1が構成に含まれるものです。同じように、この質問に変更します。
ここに画像を挿入説明


```java
public class LeetCode567 {


    public boolean checkInclusion(String s1, String s2) {

        //l1是窗口长度
        int l1 = s1.length();
        int l2 = s2.length();
        int[] arr1 = new int[26];
        int[] arr2 = new int[26];
        for (char c : s1.toCharArray()) {
            arr1[c - 'a']++;
        }
        //滑动l2,字符串,窗口内的字符串,放到数组里,对比两个数组是否相等,相等包含,不相等,不包含
        for (int i = 0; i < l2; i++) {
            if (i >= l1) {
                //i-l1 左窗口指针
                --arr2[s2.charAt(i - l1) - 'a'];
            }
            arr2[s2.charAt(i) - 'a']++;
            if (Arrays.equals(arr1, arr2))
                return true;
        }
        return false;
    }
}

公開された55元の記事 ウォン称賛14 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq422243639/article/details/103742110