То, что вы делаете, должно работать. Я не понимаю часть, касающуюся карты, поэтому вот алгоритм, который сначала находит самый длинный префикс, а затем удаляет его из всех путей:
func removeLargestPrefix(in []string) []string {
// Store split paths in results
results:=make([][]string,0,len(in))
// Pick the first path as the longest prefix
results=append(results,strings.Split(in[0],"/"))
longest:=results[0]
// cmp shortents the known longest prefix
cmp:=func(a []string) {
if len(a)<len(longest) {
longest=longest[:len(a)]
}
for i:=0;i<len(longest);i++ {
if a[i]!=longest[i] {
longest=longest[:i]
return
}
}
}
// process all paths
for i:=1;i<len(in);i++ {
r:=strings.Split(in[i],"/")
results=append(results,r)
cmp(r)
}
// here, len(longest) is the length of the longest prefix
out:=make([]string,0,len(results))
for _,r:=range results {
out=append(out,strings.Join(r[len(longest):],"/"))
}
return out
}