C++ 中的键盘行
给定一个单词列表,我们需要找到那些仅使用标准键盘布局上的某一行字母即可键入的单词。
因此,如果输入类似于 ["hello","world","mom","dad","try","type","tom"],那么输出将为 ["dad","try","type"]
为了解决此问题,我们将遵循以下步骤 −
定义一个数组 output
oneRow := true
定义一个映射 charToRowMap,这将获取所有这样的对 {letter,line},其中 letter 是键盘上的字母,而 line 是键盘上的行号。
对于 words 数组中的每个单词 -
如果单词不为空,则 -
oneRow := true
row := charToRowMap[tolower(word[0])
对于从 1 开始的初始值 i,当 i < word 的大小时,更新 (将 i 加 1),执行 -
如果 charToRowMap[tolower(word[i]) 不等于 row,则 -
oneRow := false
退出循环
如果 oneRow 非零,则 -
在 output 的末尾插入 word
返回 output
示例
我们来看一下以下实现,以便更好地理解 −
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<string> findWords(vector<string>& words) { vector<string> output; bool oneRow = true; unordered_map<char, int> charToRowMap{ { 'q', 1 }, { 'w', 1 }, { 'e', 1 }, { 'r', 1 }, { 't', 1 }, { 'y', 1 }, { 'u', 1 }, { 'i', 1 }, { 'o', 1 }, { 'p', 1 }, { 'a', 2 }, { 's', 2 }, { 'd', 2 }, { 'f', 2 }, { 'g', 2 }, { 'h', 2 }, { 'j', 2 }, { 'k', 2 }, { 'l', 2 }, { 'z', 3 }, { 'x', 3 }, { 'c', 3 }, { 'v', 3 }, { 'b', 3 }, { 'n', 3 }, { 'm', 3 } }; for (auto word : words) if (!word.empty()) { oneRow = true; int row = charToRowMap[tolower(word[0])]; for (int i = 1; i < word.length(); i++) if (charToRowMap[tolower(word[i])] != row) { oneRow = false; break; } if (oneRow) output.push_back(word); } return output; } }; main(){ Solution ob; vector<string> v = {"hello","world","mom","dad","try","type","tom"}; print_vector(ob.findWords(v)); }
输入
{"hello","world","mom","dad","try","type","tom"}
输出
[dad, try, type, ]
广告