二つの文字列s1とs2を考えると、S1の順列をs2contains場合はtrueを返すように関数を記述します。つまり、最初の文字列の順列の1は、第二の文字列の部分文字列です。
例1:
入力:S1 = "AB"、S2 = "eidbaooo" 出力:真の 説明:S2は、S1( "BA")のいずれかの順列が含まれています。
例2:
入力:S1 = "AB"、S2 = "eidboaoo" 出力:偽
注意:
- 入力文字列は小文字が含まれています。
- 両方の所与の文字列の長さは、[10,000 1]の範囲内です。
スライドウィンドウ
時間= O(N)スペース= O(1)
クラスソリューション{ パブリック ブールcheckInclusion(ストリングS1、文字列s2){ int型 [] MAP1 = 新しい INT [26 ]。 INT [] MAP2 = 新しい int型 [26 ]。 用(チャーC:s1.toCharArray()){ MAP1 [C - 'A'] ++ ; } INT遅い= 0、高速= 0 。 一方、(高速< s2.length()){ チャー CF = s2.charAt(速いです)。 MAP2 [CF - 'A'] ++ ; 速いです++ ; 一方 - (遅い>速いs1.length()){ チャー CS = ; s2.charAt(遅いです) MAP2 [CS - 'A'] - 。 遅く ++ ; } 場合(高速-低速==のs1.length()&& 一致(MAP1、MAP2)){ 戻り 真。 } } を返す 偽。 } パブリック ブールマッチ(INT [] MAP1は、int型[] MAP2){ ため(int型私は26 <; I = 0 iは++){ もし!(MAP1は、[I] = MAP2 [I]){ 戻り 偽。 } } 戻り 真。 } }