Leetcode Note: Go - Find the Difference
Add Binary - LeetCode
https://leetcode.com/problems/add-binary/
- Go 言語で取り組んだメモ
所感
- string の s, t が連携されるので diff を検出して内容を byte で return する
- s の長さは t + 1 になることが保証されているものとする
回答
[Go] Solution - LeetCode Discuss
https://leetcode.com/problems/find-the-difference/discuss/556069/Go-Solution
func findTheDifference(s string, t string) byte {
rec := make([]int, 26)
for i := range s {
rec[t[i]-'a']++
rec[s[i]-'a']--
}
rec[t[len(t)-1]-'a']++
var i int
for i = range rec {
if rec[i] == 1 {
break
}
}
return byte(i + 'a')
}
- rec でアルファベット情報を格納する配列を定義
- 1度目のループ
- rec 内の t[i] に対して ++ を行う
- rec 内の s[i] に対して – を行う
- これで diff が無い箇所は 0 となり、 diff が有る場所は 1 というマッピングが出来上がる
- 添字を 0 - 26 の範囲にするため
-a
が行われてる
rec[t[len(t)-1]-'a']++
- これは s の方が長さが +1 なので、長さの差分で発生してしまったデータを相殺するための処理
- 2度目のループ
- rec の中で 1 のデータがあれば、それが diff だと判定できるので break でループを抜ける
- 判別した diff を return して終了
-a
しておいた分を相殺するため+a
する
アルファベットを扱う時には配列を用意して -a
して 0 スタートの数値として処理するのが便利そう