辞書の本質: 内部は配列です キーは、ハッシュ関数整数によって計算されるように計算された整数後%の長さの配列剰余 インデックスを取得し、インデックスに対応するアドレスに値を格納します セットにはキーのみがあり、値辞書はありません。 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を返します