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 できた