can anyone check my TC and let me know if this is optimized ? and suggest a better way

I've coded in Go
The question is one of Twilio's question
https://www.chegg.com/homework-help/questions-and-answers/1-vanity-number-search-twilio-customers-sometimes-request-purchase-vanity-phone-numbers-va-q56780932

package main

import (
"fmt"
"sort"
"strconv"
)

 type TrieNode map[byte]TrieNode

//preProcess + // Build match + sort
//O(len(patterns)len(largestPattern)) + O(len(givenStrings)(len(givenString)^2)*O(len(patterns)*len(largetPattern)) +O(N(logN))

func main() {

patterns := []string{"TWLO", "CODE", "HTCH"}
givenStrings := []string{"+17474824380", "+14157088956", "+919810155555", "+15109926333"}
ToMatch := preProcess(patterns)

dict := make(map[string]bool)
for _, str := range givenStrings {
	trie := NewTrie()
	trie.BuildTrie(str)
	for _, tomatch := range ToMatch {
		res := trie.MatchString(tomatch)
		if res == true {
			if _, ok := dict[str]; !ok {
				dict[str] = true
			}

		}

	}
}
res := []string{}
for k := range dict {
	res = append(res, k)
}
sort.Strings(res)
fmt.Println(res)

}
func NewTrie() TrieNode {
return TrieNode{}
}
func (t TrieNode) BuildTrie(str string) {
for j := range str {
	trie := t
	for i := j; i < len(str); i++ {
		letter := str[i]
		if _, ok := trie[letter]; !ok {
			trie[letter] = NewTrie()
		}
		trie = trie[letter]
	}
	trie['*'] = nil
}
}
func (t TrieNode) MatchString(str string) bool {
trie := t

for i := 0; i < len(str); i++ {
	letter := str[i]
	if _, ok := trie[letter]; !ok {
		return false
	}
       trie = trie[letter]
}
return true
}

func preProcess(patterns []string) []string {
var result []string
DtoN := map[string]int{"A": 2, "B": 2, "C": 2, "D": 3, "E": 3, "F": 3, "G": 4, "H": 4, "I": 4, "J": 5, "K": 5, "L": 5, "M": 6, "N": 6, "O": 6, "P": 7, "Q": 7, "R": 7, "S": 7, "T": 8, "U": 8, "V": 8, "W": 9, "X": 9, "Y": 9, "Z": 9}
for _, pattern := range patterns {
	converted := ""
	for i := 0; i < len(pattern); i++ {
		converted += strconv.Itoa(DtoN[string(pattern[i])])
	}
	result = append(result, converted)
}
return result
}
Comments (0)