问题描述
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。
示例:
- 输入: ["Hello", "Alaska", "Dad", "Peace"]
- 输出: ["Alaska", "Dad"]
注意:
- 你可以重复使用键盘上同一字符。
- 你可以假设输入的字符串将只包含字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/keyboard-row
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
执行结果
代码描述
思路:三行字符,分别存入三个字符串。把要匹配的目标字符串数组,先单个处理成小写,然后分别查找。仅存在于1行字符串的,才记录下来。其他的就不记录。
class Solution {
public:
vector<string> findWords(vector<string>& words) {
string level1 = "qwertyuiop";
string level2 = "asdfghjkl";
string level3 = "zxcvbnm";
vector<string> res;
char c;
for(int i = 0; i < words.size(); ++i)
{
int l1 = 0, l2 = 0, l3 = 0;
for(int j = 0; j < words[i].size(); ++j)
{
c = tolower(words[i][j]);
if(level1.find(c) != string::npos)
{
l1 = 1;
}
else if(level2.find(c) != string::npos)
{
l2 = 1;
}
else if(level3.find(c) != string::npos)
{
l3 = 1;
}
if(l1+l2+l3 > 1)
{
break;
}
}
if(l1+l2+l3 == 1)
{
res.push_back(words[i]);
}
}
return res;
}
};