给定一个单词列表,我们必须找到那些只能在标准键盘布局的一行上使用字母输入的单词。
因此,如果输入类似于[“ hello”,“ world”,“ mom”,“ dad”,“ try”,“ type”,“ tom”],则输出将为[“ dad”,“ try” ,“类型”]
为了解决这个问题,我们将遵循以下步骤-
定义数组输出
oneRow:=真
定义一个映射charToRowMap,它将采用所有对,例如{letter,line},字母是键盘上的字母,而line是键盘上的行号。
对于单词数组中的每个单词-
oneRow:=真
行:= charToRowMap [tolower(word [0])
对于初始化i:= 1,当i <字长时,更新(i增加1),-
如果oneRow不为零,则-
oneRow:=错误
从循环中出来
如果charToRowMap [tolower(word [i])不等于row,则-
在输出末尾插入单词
如果单词不为空,则-
返回输出
让我们看下面的实现以更好地理解-
#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, ]