easy LC #387 ↗

PROBLEM 05

最初に1度だけ現れる文字

文字列の中で重複しない最初の文字位置を返します。

目安 30分 frequency-map · two-pass

ログの識別子を表す文字列から、全体で1度だけ現れる最初の文字を探します。 firstUniqChar(value) はその位置を返し、該当する文字がなければ -1 を返してください。

入力: "aabbcdeed"
出力: 4
理由: 位置4の "c" が、左から最初の出現回数1の文字
入力: "aabbcc"
出力: -1

制約

  • 1 <= value.length <= 200,001
  • 入力は英小文字からなる

対応する問題: LeetCode #387 First Unique Character in a String

STEPWISE HINTS

ヒント

01考え方の方向

左から見ただけでは、その文字が後でもう一度現れるか分かりません。情報を集める走査と、答えを探す走査を分けます。

02使うデータ構造

Map で各文字の出現回数を数えます。その後、元の順番で回数が1の文字を探します。

03擬似コード

1回目のループで counts[char] を増やす。2回目のループで counts[value[i]] === 1 なら i を返す。なければ -1。

AFTER ACCEPTED

解説

AC 後に解説が開きます

まずは自分の言葉で方針を説明し、コードに落としてみましょう。