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 スタートの数値として処理するのが便利そう