Leetcode Note: Go - Implement Strstr

Implement strStr() - LeetCode
https://leetcode.com/problems/implement-strstr/

  • Go 言語で取り組んだメモ

所感

  • for loop を回し haystack に needle があるかチェックしていけば良さそう

実装準備

func strStr(haystack string, needle string) int {
    return 0
}

func main() {
    haystack := "hello"
    needle := "ll"
    
    fmt.Println(strStr(haystack, needle))
}

v1

func strStr(haystack string, needle string) int {
    output := -1

    for i := 0; i < len(haystack) - len(needle); i++ {
        if string(haystack[i:i+len(needle)]) == needle {
            return i
        }
    }

    return output
}

=> Wrong Answer

  • heystack = "a", needle = "a" の場合に 0 ではなく -1 を返してしまう
    • for loop の条件が悪い
    • どちらも 1文字 がインプットされるという、想定が出来てなかった

回答

func strStr(haystack string, needle string) int {
    output := -1

    for i := 0; i <= len(haystack) - len(needle); i++ {
        if string(haystack[i:i+len(needle)]) == needle {
            return i
        }
    }

    return output
}
  • シンプルなアルゴリズムだった
    • LeetCode が用意している Solution も無い
  • ループ回しつつ配列外へのアクセスを防ぐように、文字列チェックすれば OK
  • シンプルに値を return すれば良い関数であればデバッグも楽で試行錯誤もやりやすい