アルゴリズムの説明

辞書の本質:
    内部は配列です
    キーは、ハッシュ関数整数によって計算されるように計算された整数後%の長さの配列剰余
    インデックスを取得し、インデックスに対応するアドレスに値を格納します

    セットにはキーのみがあり、値辞書はありません。
    dictの場合、すべての操作の時間の複雑さはO( 1 )ですが、空間の複雑さはO(n)です。

    タイトルを表示するには:
        カウント
        登場しました(セット)
        繰り返しましたか
    上記の言葉はdictの使用を検討することができます
    dictは <key、times>および<key、index> を格納できます

1. 文字列def letter_count(s)の文字数を数えます
     
        freq = {}
         for i in s:
             if i.isalpha():
                freq [i] = 1 + freq.get(i、0)は
         freqを返します

2. 文字列内の最大文字数を持つ文字を見つけます
    アイデア:最初に計算し、次にトラバースする

    def max_letter_count(s):
        freq = {}
         for i in s:
             if i.isalpha():
                freq [i] = 1 + freq.get(i、0)
        max_count = 0
        max_letter = 0
         のためのキー、ヴァルfreq.items():
             もしヴァル> MAX_COUNT。
                max_count = val
                max_letter = key
         return max_letter、max_count

3. 文字列内で繰り返し出現しない最初の文字を検索し、文字の位置(インデックス)を返します
    例:s = ' givenastring ' 文字vは繰り返しのない最初の文字なので、
    アイデア:最初にdictを使用して文字列内のすべての文字を数えます
         次に、文字列を走査し、文字の出現回数が1の場合、インデックスを返します
    def first_unqie_letter(s):
        freq = {}
         for i in s:
             if i.isalpha():
                FREQ [I] = + freq.get 1(I、0)。 カウント
        するための I における範囲(LEN(S)):
             IF freq.getは(S [I])== 1:リターン発生
                リターンIの
         リターンを -1

4. 2つの配列で共通の要素を見つける
    アイデア:配列1をセットに格納し、配列2をトラバースし、各要素が配列1に現れたかどうかを判断します。
    def cross(arra1、arra2):
        a1 = set(arra1)
        RET = []
         のためのarra2:
             もしA1:
                ret.append(i)
        右に戻る

    Pythonのsetの特性を使用して、コードの文:set(arra1)set(arra2)

5. 文字列s1の文字が文字列s2に出現する回数を数え、
    例:s1 = ' aA ' s2 = ' aAAbbb '出力3 
         s1 = ' z ' s2 = ' ZZ ' 出力0
    アイデア:暴力的なソリューション、2層のforループ
    def count_letter(s1、s2):
        カウント数 = 0
         のためのS1:
             のための J でのS2:
                 もし私== J:
                    count + = 1
         return count
    セットを使用して時間の複雑さを軽減
    def count_letter(s1、s2):
        カウント = 0
        s = set(s1)
         for i in s2:
             if i in s:
                count + = 1
         return count

6. 文字列に繰り返し文字があるかどうかを確認する
    アイデア1:ストリングの長さをセットに比較し、ストリングの長さを比較して、それらが等しいことを比較します。
    def is_contains_duplicate(s):
         return  not(len(s)== len(set(s)))

    アイデア2:dictを使用してキーを格納し、count = 2の場合はfalseを返します
     def is_contains_duplicate(s):
        D = {}
         のためのインデックス値列挙(S):
            側は(例えばよう合計として累積評価を)決定されるストレージのために、最初に決定し、保存しなければならない 
            D [値] = 1。IFはありません  D  D [値] + 1。
             IF D  d.get(値)> = 2 リターン戻り

7. 文字列に繰り返し文字があるかどうか、繰り返し文字のインデックス間の差がk以下かどうかを判断
    アイデア:dictを使用してfor ループの間に判断しdictが存在しない場合は格納します。
        存在するかどうかを判断する
    def is_contain_duplicate(s、k):
        D = {}
         ため IDX、ヴァル列挙(S):
             IFヴァルにおける D (IDX - d.get(ヴァル))> = K:
                 リターン#がS =ために決定されていない場合、そこヴァルか否かを判断します「aaba」、k = 3、
                 val dにない場合は問題があります 
                    d [val] = idxは
         Falseを返します

 

おすすめ

転載: www.cnblogs.com/yaoqingzhuan/p/12688301.html