🔖
[Go/LeetCode] 28. Find the Index of the First Occurrence in a String
概要
↓の解法メモです。
問題概要
全体文字列 haystack
と検索文字列 needle
が渡されるので、文字列の中に検索文字列があればそのインデックス、なければ -1
を返します。
たとえば helloworld
に対して low
が渡された場合は 4
を返します。
解法
初見
Go では strings.Index
がこれにあたるのでこれを使えばよいのですが、なんか悔しいので独自に実装しました。
めちゃくちゃ遅かったです。
func safeSlice(s string, start int, end int) string {
fmt.Println(start, end)
if end > len(s) {
end = len(s)
}
fmt.Println(start, end, s[start:end])
return s[start:end]
}
func strStr(haystack string, needle string) int {
for i:=0;i<len(haystack);i++ {
if needle == safeSlice(haystack, i, i+len(needle)) {
return i
}
}
return -1
}
最適なコード
strings.Index
を使おう。
func strStr(haystack string, needle string) int {
return strings.Index(haystack, needle)
}
一応内部実装を見てみましたが、ケースに応じて細かい最適化がされてておもしろかったです。
Discussion