INSIGHT

インサイト

2014年312

CheckIOに挑戦 Pythonのハッシュ型を学ぶ

こん○●は!PHPerです。

さて、さっそく今日もCheckIOの第4問に挑戦します。

まずは、解答案をまとめてみます。

(1) 文字列を1文字ずつイテレーションする (2) 文字列が英文字以外であれば何もしない。 (3) 小文字に変換して、その文字のカウントをする。 (4) その際にもっとも高頻度に出現する文字のカウント数(a)をメモする (5) 最後に、(a)と同じ回数出現する文字を検索する(複数見つかる場合も) (6) 見つかった文字をソートして一番アルファベット順で先頭の文字を返す

なんか、(4)(5)(6)がダサイですね~。「頻度がもっとも高くて、アルファベット順がもっとも先頭」のものを一発で検索したいです。下記のように変えてみます。

(4) 最後に、出現頻度表をイテレーションする。 (5) 出現頻度が最も高いものを探す。同じだった場合はアルファベット順が先頭のものを優先する。

ということで、方針が決まったので、今回の処理に必要なPythonの言語やライブラリの仕様を検索してまとめてみました。

さて、レッツゴー!プログラミング!

今回は、一発で通りました~!キモチイ~!

def checkio(str):
  d = {}
  for letter in str:
    if letter.isalpha():
      lower = letter.lower()
      if lower in d:
          d[lower] += 1
      else:
          d[lower] = 0
  find = False
  max = 0
  for item in d.items():
    letter,count = item
    if max < count:
      find = letter
      max = count
    elif max == count and (not find or letter < find):
      find = letter
  return find