键盘行 来源:力扣

键盘行

❤️ 简单

题目介绍

给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。

美式键盘 中:
在这里插入图片描述

第一行由字符 “qwertyuiop” 组成。
第二行由字符 “asdfghjkl” 组成。
第三行由字符 “zxcvbnm” 组成。

示例 1:
输入:words = [“Hello”,“Alaska”,“Dad”,“Peace”]
输出:[“Alaska”,“Dad”]

示例 2:
输入:words = [“omk”]
输出:[]

示例 3:
输入:words = [“adsdf”,“sfd”]
输出:[“adsdf”,“sfd”]

提示:
1 <= words.length <= 20
1 <= words[i].length <= 100
words[i] 由英文字母(小写和大写字母)组成

思路分析

目标
给出string数组,若该数组是在键盘的同一行的,按一定格式输出该数组
明确

  • 26个字母,每一行不重复
  • 输入有大小写,是否要探讨大小写
  • 根据ASCⅡ表,每一个字符有对应的值,而且26个字母按照顺序排列
  • 不必要的判断可以跳过,例如判断某一个字串,存在一个字符与前面的字符不在一行上,就可以跳过该字符

思路

  1. 因为每一行的字符是确定的,26个字母在ASCⅡ表上是顺序排列的,所以对 ”abcdefghijklmnopqrstuvwsyz",我们可以根据他们的顺序如上两点,确定一个所在行的字符串 m=“12210111011122000010020202”
  2. 对于字符串集words,遍历每一个数组,判断是否在同一行
  3. 对于数组,逐个字符判断,对照字符串m确定前一个字符是否与后一个字符在同一行上
  4. 对于大写字母 ,字符串m[word[i][j]-‘A’+0],正好对应了字符word[i][j]所对应的行
  5. 大小写有干扰,所以使用函数,将字符变成小写
代码
class Solution {
public:
    vector<string> findWords(vector<string>& words) {
        vector<string> answer;bool flag;char c;
        string m = "12210111011122000010020202";
        for (auto & word : words) {
            flag = true;//判断
            c = m[tolower(word[0]) - 'a'];//确定第一个字符所在行
            for (int i = 1; i < word.size(); ++i) {
                if(m[tolower(word[i]) - 'a'+0] != c) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                answer.emplace_back(word);//在同一行,将该字串加入向量answer中
            }
        }
        return answer;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值