Leetcode Note: Go - Longest Common Prefix
Longest Common Prefix - LeetCode
https://leetcode.com/problems/longest-common-prefix/
- Go 言語で取り組んだメモ
所感
- input された各種 string 情報を全部走査して愚直に実装すれば良さそう
実装準備
func longestCommonPrefix(strs []string) string {
return "Hello"
}
func main() {
input := []string{"flower","flow","flight"}
fmt.Println(input)
output := longestCommonPrefix(input)
fmt.Println(output)
}
配列の各要素の先頭文字列から一致しているかを確認するには
- strs をループで全て走査しつつ、それらを最小文字列分ループするのがシンプルそう
最小文字列数を取得
minLength := 201
for i := 0; i < len(strs); i++ {
if len(strs[i]) < minLength {
minLength = len(strs[i])
}
}
- 問題の制約上、最大文字列は 200 なので 201 より小さいものを順に代入すれば良さそう
- もっと良い実装方法ありそうだが・・・
各種文字列の先頭を比較していく
// 各 string の先頭文字から一致するか比較
// 最小文字列をスコープとしてループ
for i := 0; i < minLength; i++ {
var currentChar string
// 各文字を比較
for _, str := range strs {
// 比較する文字列の初期化処理
if currentChar == "" {
currentChar = string(str[i])
continue
}
if string(str[i]) != currentChar {
return output
}
}
output += string(currentChar)
}
回答
func longestCommonPrefix(strs []string) string {
output := ""
// strs の中で最小文字列長を特定
minLength := 201
for i := 0; i < len(strs); i++ {
if len(strs[i]) < minLength {
minLength = len(strs[i])
}
}
// 各 string の先頭文字から一致するか比較
// 最小文字列をスコープとしてループ
for i := 0; i < minLength; i++ {
var currentChar string
// 各文字を比較
for _, str := range strs {
// 比較する文字列の初期化処理
if currentChar == "" {
currentChar = string(str[i])
continue
}
if string(str[i]) != currentChar {
return output
}
}
output += string(currentChar)
}
return output
}
これで Pass できた