Skip to content

Instantly share code, notes, and snippets.

@wader
Created February 22, 2021 16:18
Show Gist options
  • Save wader/43acf9849d3b0777367cb97dbfeca183 to your computer and use it in GitHub Desktop.
Save wader/43acf9849d3b0777367cb97dbfeca183 to your computer and use it in GitHub Desktop.
shared prefix go
package sharedprefix
func SharedPrefix(vs []string) string {
if len(vs) == 0 {
return ""
}
l := len(vs[0])
for _, s := range vs[1:] {
if l > len(s) {
l = len(s)
}
}
for i := 0; i < l; i++ {
for _, s := range vs[1:] {
if vs[0][i] != s[i] {
return vs[0][0:i]
}
}
}
return vs[0][0:l]
}
package sharedprefix_test
func TestSharedPrefix(t *testing.T) {
testCases := []struct {
vs []string
shared string
}{
{vs: []string{}, shared: ""},
{vs: []string{""}, shared: ""},
{vs: []string{"a"}, shared: "a"},
{vs: []string{"a", "a"}, shared: "a"},
{vs: []string{"aa", "ab"}, shared: "a"},
{vs: []string{"aa", "aa"}, shared: "aa"},
{vs: []string{"abc", "abc", "ab"}, shared: "ab"},
{vs: []string{"ab", "abc", "ab"}, shared: "ab"},
{vs: []string{"abc", "abc", "abd"}, shared: "ab"},
}
for _, tC := range testCases {
t.Run(fmt.Sprintf("%v", tC.vs), func(t *testing.T) {
actual := query.SharedPrefix(tC.vs)
if tC.shared != actual {
t.Errorf("expected %v, got %v", tC.shared, actual)
}
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment