[Easy] leetcode-500 键盘行
一、题目描述
给你一个字符串数组 words
,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
请注意,字符串 不区分大小写,相同字母的大小写形式都被视为在同一行。
美式键盘 中:
- 第一行由字符
"qwertyuiop"
组成。 - 第二行由字符
"asdfghjkl"
组成。 - 第三行由字符
"zxcvbnm"
组成。
示例 1:
输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]
解释:
由于不区分大小写,"a" 和 "A" 都在美式键盘的第二行。
示例 2:
输入:words = ["omk"]
输出:[]
示例 3:
输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]
二、题目解答
1.每一行的字符加入哈希表,同一行的value值相同
2.判断每个value是否都相同,即是否都在一行,在则加入结果字符串容器
class Solution {
public:
vector<string> findWords(vector<string>& words) {
string s1 = "QWERTYUIOPqwertyuiop";
string s2 = "ASDFGHJKLasdfghjkl";
string s3 = "ZXCVBNMzxcvbnm";
map<char, int> my_map;
for (auto c :s1)
{
my_map[c] = 1;
}
for (auto c :s2)
{
my_map[c] = 2;
}
for (auto c :s3)
{
my_map[c] = 3;
}
vector <string> res;
for(int i = 0 ; i < words.size(); i++)
{
string tmp = words[i];
int row = my_map[tmp[0]];//哈希值
bool is_samerow = true;
for (int j = 1; j < tmp.size(); j++)
{
if (my_map[tmp[j]] != row)
{
is_samerow = false;
break;
}
}
if (is_samerow)
res.push_back(tmp);
}
return res;
}
};