[用Golang刷LeetCode之 5] 500. Keyboard Row

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

題目

問題連結: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_Rowimport (    "fmt"    "strings")var alphabetMap map[string]intfunc 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_Rowimport "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")}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.