easy LC #387

PROBLEM 05

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

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

目安 30分 frequency-map · two-pass

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

入力: "aabbcdeed"
出力: 4
理由: 位置4の "c" が、左から最初の出現回数1の文字
入力: "aabbcc"
出力: -1
理由: すべての文字が2回ずつ現れるため、条件を満たす文字がない

制約

  • 1 <= value.length <= 200,001
  • 入力は英小文字からなる
  • 目標: O(n) 相当(文字ごとに残り全体を調べ直す解法は性能テストで時間切れになります)

対応する問題: 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 後に解説が開きます

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