leetcode-03最長の部分文字列を繰り返すことなく、文字

問題のコードソリューション

クラスソリューション:
    :lengthOfLongestSubstring(STR自己、S)DEF - > INT 
        長さ = LEN(S)
        のRES = 0 
        カウント = 0 
        のための I における範囲(長さ):
            カウント = 1 
            DIC = {S [I]:1 }
             のために J における範囲(I + 1 、長さ):
                 もし DIC。取得(S [J]、0 ):
                    RES =MAX(RES、カウント)
                     破る
                 + = 1つの
                    DIC [S [J] = 1 
            
                RES = MAX(RES、カウント)
             であれば解像度>長さ- I:
                 リターンRES
         リターン MAX(RES、カウント)

まず、全体的な分析

1.タイトル中難易度、文字列の中で最も長い文字列を検索するには、(連続)を繰り返し含まれていません。

図2は、第1、主導結果の各文字に非反復文字の最長の文字列の長さを見つけ、文字Sをループ強引な方法を使用することも考えられるかもしれ

    そして、文字に対応するすべての非繰り返し文字の最長の最大文字列の長さを返します。

 

第二に、具体的な実践

非反復の長格納最長の文字列変数1.解像度は、各繰り返しは、空間と時間の無駄を生じさせることなく、ユニークな文字列が率いるすべての文字で長い保管を避け、それを更新。

2.現在の変数countの長さは、(可変アップデート2サイクリックすることによって)非反復列の文字、現在利用可能な頭構成で計算されます。

3. DIC変数辞書、文字が前に横断し、重複することなく、文字列を構成するように組み合わせることができるかどうかを、得られた2環式の現在の部分を比較します、

    現在の文字がすでにDIC内部に存在している場合、それは文字が以前に発生していることを示し、ループは直ちに終了しなければならない、最も長い文字列の長さに導かれ、カウントの現在値が設定を複製することはできません、

    次の文字へのトラバースが続き、数とDICを再初期化します。

 

おすすめ

転載: www.cnblogs.com/DreamDoom/p/Answer03.html