🐭
NeetCodeをGo言語で挑戦~is Anagram
NeetCode とは?
前回の記事を参考にしてください。
今回は、第2問目となります。
is Anagram
is Anagram は、2つの文字列を引数として渡します。
その渡された引数aと引数bの文字の種類と数が一致しているかを判定します。
一致すれば、True を戻します。もし、そうでなければ、False を戻します。
例えば、以下の場合は、true と返します。
Input : "hello" , "olleh"
Output : true
以下の場合は、false と返します。
Input : "golang", "langpo"
Output : false
アプローチ方法
順番に線形に処理していくとなると文字数が増えるたびに、処理時間も膨大になります。
そこで、ハッシュマップを利用します。
以下のフローにて実装しています。
- 入力される文字列の数が一致しない場合は、falseとする
- ハッシュマップを作成します。
Go言語では、文字列が不変(immutable)となるので、ミュータブル(mmutable)なrune型にて対応します。
【参考】
- 入力される文字列sを増加させて、もう一方の入力される文字列tを減少させます。
- 最終的に文字列カウントが0となっていることを確認します。
実装サンプル
func isAnagram(s string, t string) bool {
if len(s) != len(t) {
return false
}
Count := make(map[rune]int)
for i := 0; i < len(s); i++ {
Count[rune(s[i])]++
Count[rune(t[i])]--
}
for _, c := range Count {
if c != 0 {
return false
}
}
return true
}
まとめ
今回も、easy レベルの問題でした。
ハッシュマップを最初、2つ用意したのですが、途中で、1つでできるかもと考えて、実装中に方針を修正しました。
今回は、仮設出し、方針決めから実装までで、10 分程度でした。
引き続き、アウトプットの練習も兼ねて、取り組んでいきたいと思います。
Discussion