lc-go/solutions/12/q1268/solution.go
2026-01-25 11:56:12 +09:00

38 lines
768 B
Go

package q1268
import "slices"
func prefixSearch(products []string, prefix string) []string {
ret := make([]string, 0, 3)
pfLen := len(prefix)
l, r := 0, len(products)
for l < r {
m := (l + r) / 2
if products[m][:min(len(products[m]), pfLen)] >= prefix {
r = m
} else {
l = m + 1
}
}
for ; l < len(products) && len(products[l]) >= pfLen && products[l][:pfLen] == prefix; l++ {
ret = append(ret, products[l])
if len(ret) == 3 {
break
}
}
return ret
}
func suggestedProducts(products []string, searchWord string) [][]string {
slices.Sort(products)
ret := make([][]string, 0, len(searchWord))
for i := range len(searchWord) {
ret = append(ret, prefixSearch(products, searchWord[:i+1]))
}
return ret
}
var _ = suggestedProducts