leetcode500. 键盘行

【简单题】

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

美式键盘 中:

  • 第一行由字符 "qwertyuiop" 组成。
  • 第二行由字符 "asdfghjkl" 组成。
  • 第三行由字符 "zxcvbnm" 组成。

示例 1:

复制代码
输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]

示例 2:

复制代码
输入:words = ["omk"]
输出:[]

示例 3:

复制代码
输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]

思路:

设置3个哈希表,把这一行的所有字母映射为该行的行号。依次遍历vector中的字符串,先记录第一个的行号,往后遍历,如果他们与这个不同的话。就结束遍历当前字符串。如果遍历到最后都是一个行的话,就将该字符串入栈。

代码

cpp 复制代码
class Solution {
public:
    vector<string> findWords(vector<string>& words) {
        vector<string> ans;
        string str1 = "qwertyuiop";
        string str2 = "asdfghjkl";
        string str3 = "zxcvbnm";
        map<char, int> mp;
        for (int i = 0; i < str1.length(); i++) {
            char a = str1[i];
            mp[a] = 1;
        }
        for (int i = 0; i < str2.length(); i++) {
            char a = str2[i];
            mp[a] = 2;
        }
        for (int i = 0; i < str3.length(); i++) {
            char a = str3[i];
            mp[a] = 3;
        }
        //遍历words 字符串数组
        for (int i = 0; i < words.size(); i++) {
            string str = words[i];
            int row = 0;
            char b = str[0];
            b = (b >= 65 && b <= 90) ? b += 32 : b;
            row = mp[b];
            int j;
            for (j = 1; j < str.length(); j++) {
                char a = str[j];
                if (a >= 65 && a <= 90)	a += 32; // 大写转小写
                if (mp[a] != row) {
                    break;
                }
            }
            if (j == str.length()) {
                ans.push_back(str);
            }
        }

        return ans;
    }
};

运行结果:

相关推荐
88号技师10 分钟前
2026年2月一区SCI-交叉传播优化算法Propagation Alongside Crossover-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
A.零点15 分钟前
【2个月 C 语言从入门到精通:零基础系统教程】第十二讲:深入了解指针(五)
c语言·开发语言·网络·笔记·visual studio
飞天狗11125 分钟前
零基础JavaWeb入门——第五课第一小节:九大内置对象 · 第1个:request(请求对象)
java·开发语言·前端·后端·servlet
z落落25 分钟前
C#ToolStrip+StatusStrip 状态栏实时显示系统时间+NotifyIcon系统托盘
开发语言·c#
插件开发36 分钟前
vs2015 cuda c++ 线程号的计算详解
开发语言·c++·算法
石山代码36 分钟前
变量与解构
开发语言·前端·javascript
c++之路41 分钟前
Bazel C++ 构建系列文档(五):多目标与多包项目
java·开发语言·c++
Hello:CodeWorld1 小时前
【C++ 避坑指南】告别缓冲区溢出!全面解析 std::snprintf 的安全美学与核心陷阱
开发语言·c++·安全
凡人叶枫1 小时前
Effective C++ 条款38:通过复合塑模出 has-a 或 \“根据某物实现出\
linux·开发语言·c++·windows
枫叶丹41 小时前
【HarmonyOS 6.0】MDM Kit:PC/2in1设备用户行为限制策略详解
开发语言·华为·harmonyos