文字列で567順列 - 中

二つの文字列s1とs2を考えると、S1の順列をs2contains場合はtrueを返すように関数を記述します。つまり、最初の文字列の順列の1は、第二の文字列の部分文字列です。

 

例1:

入力:S1 = "AB"、S2 = "eidbaooo" 
出力:真の
説明:S2は、S1( "BA")のいずれかの順列が含まれています。

例2:

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

 

注意:

  1. 入力文字列は小文字が含まれています。
  2. 両方の所与の文字列の長さは、[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]){
                 戻り 
            } 
        } 
        戻り 
    } 
}

 

おすすめ

転載: www.cnblogs.com/fatttcat/p/11386718.html