[LeetCode By Go 5]500. Keyboard Row

題目

問題鏈接:https://leetcode.com/problems/keyboard-row/#/description
Given a List of words, return the words that can be typed using letters of alphabet on only one row’s of American keyboard like the image below.


Example 1:
Input: ["Hello", "Alaska", "Dad", "Peace"]Output: ["Alaska", "Dad"]

Note:
You may use one character in the keyboard more than once.
You may assume the input string will only contain letters of alphabet.

思路

  1. 用Map存儲字母到所在行的映射。
  2. 變量words,對每一個單詞,先做小寫字母轉換存入word,再對word的每個字母進行遍歷。用flag標記是否是第一個字母,用row存儲第一個字母所在的行,對后續的字母,判斷其所在行是否等于row,若不是,直接跳出內層循環繼續判斷下一個單詞。考慮到數組需要預先設置長度,而數組長度未知,所以判斷整個單詞完畢后將其縣存入List,最后再把List的元素存入結果數組。

代碼

keyboardRow.go

package _500_Keyboard_Row

import (
    "fmt"
    "strings"
)

var alphabetMap map[string]int

func init() {
    alphabetMap = make(map[string]int)
    row1 := []string{"q", "w", "e", "r", "t", "y", "u", "i", "o", "p"}
    row2 := []string{"a", "s", "d", "f", "g", "h", "j", "k", "l"}
    for _, v := range row1 {
        alphabetMap[v] = 1
    }
    for _, v := range row2 {
        alphabetMap[v] = 2
    }
}
func findWord(word string) (ret bool) {
    word = strings.ToLower(word)
    var allRow int
    allRow = alphabetMap[word[:1]]
    length := len(word)
    for i := 1; i < length; i++ {
        row := alphabetMap[word[i:i+1]]

        if allRow != row {
            return false
        }
    }

    return true
}

func FindWords(words []string) []string {
    var ret []string

    for _, v := range words {
        ok := findWord(v)
        if ok {
            ret = append(ret, v)
        }
    }
    fmt.Printf("ret:%+v\n", ret)
    return ret
}

測試

keyboardRow_test.go

package _500_Keyboard_Row

import "testing"

func TestFindWords(t *testing.T) {

    words := []string{
        "Hello", "Alaska", "Dad", "Peace"}
    ret := FindWords(words)

    wanted := map[string]int{
        "Alaska": 1,
        "Dad": 2,
    }

    for _, v := range ret {
        _, ok := wanted[v]

        if !ok {
            t.Errorf("fail, not want but have %+v\n", v)
            return
        }
    }

    t.Logf("pass")
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容