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