15. First Unique Character in a String
読了目安 約1分
HashMap / LeetCode 387 (Easy) — 出現回数を辞書で数え、2 回目の走査で最初の一意な文字を探す。
この章の目次
問題
LeetCode 387. First Unique Character in a String(Easy / カテゴリ: HashMap)
文字列 s が与えられます。
s の中で 1 回しか登場しない文字のうち、最初に現れるものの添字を返します。
そのような文字がなければ -1 を返します。
考え方
ヒント 1
前から 1 回見るだけでは、その文字が後ろでもう一度出てくるかが分かりません。 走査を 2 回に分けます。
ヒント 2
1 回目の走査で、各文字の出現回数を辞書に数えます。 2 回目の走査で、回数が 1 の最初の文字を探します。
Swift 実装のポイント
- 出現回数は
count[c, default: 0] += 1で数えます。キーはCharacterです。 - Swift の
Stringは整数の添字でアクセスできません。位置が欲しいときはfor (i, c) in s.enumerated()を使います。
模範解答
class Solution {
func firstUniqChar(_ s: String) -> Int {
var count: [Character: Int] = [:]
for c in s {
count[c, default: 0] += 1
}
for (i, c) in s.enumerated() {
if count[c] == 1 {
return i
}
}
return -1
}
}計算量: O(n)(文字列を 2 回走査します)。