deltoid
gaff
giraffe
microphone
reef
war
You are also given a collection of letters. E.g., {a, e, f, f, g, i, r, q}. Your task is to find the longest word in the dictionary that can be spelled with the collection of letters. For example, the correct answer for the example values above is "giraffe". Note that "reef" is not a possible answer, because the set of letters contains only one "e".
package main import ( "bufio" "fmt" "io" "os" ) func longestString(path string, letters []uint8) (string, error) { file, err := os.Open(path) defer file.Close() if err != nil { return "", err } r := bufio.NewReader(file) longest := 0 result := "" for { bytes, _, e := r.ReadLine() if e == io.EOF { break } line := string(bytes) count := 0 tmp := make([]uint8, len(letters)) copy(tmp, letters) for i := 0; i < len(line); i++ { for j := 0; j < len(tmp); j++ { if line[i] == tmp[j] { // 0 to indicate the letter can't be used anymore tmp[j] = 0 count++ break } } } if count > longest { longest = count result = line } } return result, nil } func main() { chars := []uint8{'a', 'e', 'f', 'f', 'g', 'i', 'r', 'q'} str, _ := longestString(os.Args[1], chars) fmt.Println(str) }
No comments:
Post a Comment