500. 键盘行

作者: 闭门造折 | 来源:发表于2018-11-10 16:49 被阅读17次

给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。

示例:

输入: ["Hello", "Alaska", "Dad", "Peace"]
输出: ["Alaska", "Dad"]

注意:

你可以重复使用键盘上同一字符。
你可以假设输入的字符串将只包含字母。

思路:

遍历每个单词,逐字母判断是否在同一行,如果不在就退出该单词匹配

性能分析:

时间复杂度O(N * maxBit(word))
空间复杂度为O(1)

具体代码:

//打表,记录字母所在行
// a b c d e     f g h i j     k l m n o   p q r s t   u v w x y   z
int key_value[30] = {2, 3, 3, 2, 1,
                     2, 2, 2, 1, 2,
                     2, 2, 3, 3, 1,
                     1, 1, 1, 2, 1,
                     1, 3, 1, 3, 1, 3};
//翻译函数,将字符所在行返回
int trans(char c){
    if(c >= 'a' && c <= 'z'){
        return key_value[c - 'a'];
    }
    return key_value[c - 'A'];
}
//需求函数
vector<string> findWords(vector<string>& words) {
    vector<string> res;
    //遍历所有单词
    for(int i = 0; i < words.size(); i++){
        //type=单词首字母所在行号
        int type = trans(words[i][0]);
        int j;
        //遍历单词所有字母,判断是否均为type
        for(j = 1; j < words[i].size(); j++){
            if(trans(words[i][j]) != type) break;
        }
        //判断是否整个单词遍历完成
        if(j == words[i].size()){
            res.push_back(words[i]);
        }
    }
    return res;
}

相关文章

  • 500. 键盘行、26. 删除有序数组中的重复项

    500. 键盘行[https://leetcode-cn.com/problems/keyboard-row/] ...

  • 500. 键盘行

    给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。 示例: 输入: ["Hello...

  • LeetCode 500. 键盘行

    500. 键盘行 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。 示例: 注意...

  • 针对家庭和谐计划书

    提要:每月固定开销 5500 ;包括(贷款3600. 孩子固定开销500. 生活各类开销700. 油费500. ...

  • 3月15

    买入中证500.,650元

  • 键盘行

    题目: 题目的理解: 判断每一个单词是否在同一行中,一共三行,每次判断前将单词转化为小写。如果单词都在同一行,那么...

  • 键盘行

    给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。 示例: 输入: ["Hello...

  • ⌨️ 键盘行

    题目描述:给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。图例 链接:https...

  • 键盘行

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/keyboa...

  • Leetcode中遇到的一些问题(1)

    题号:500, 键盘行 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。键盘分布...

网友评论

    本文标题:500. 键盘行

    本文链接:https://www.haomeiwen.com/subject/mzozxqtx.html