一、题目介绍
给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
第一行由字符 "qwertyuiop" 组成。
第二行由字符 "asdfghjkl" 组成。
第三行由字符 "zxcvbnm" 组成。
示例 1:
输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]
示例 2:
输入:words = ["omk"]
输出:[]
示例 3:
输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]
提示:
1 <= words.length <= 20
1 <= words[i].length <= 100
words[i] 由英文字母(小写和大写字母)组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/keyboard-row
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
本文采用暴力法解题,这里就不做赘述,详见代码。
三、解题代码
class Solution {
public:
vector<string> findWords(vector<string>& words) {
string strline1 = "qwertyuiop";
string strline2 = "asdfghjkl";
string strline3 = "zxcvbnm";
vector<string> res;
int n = words.size();
for(int i = 0; i < n; ++i)
{
int flag1 = 0, flag2 = 0, flag3 = 0;
int j = 0;
for(; j < words[i].size(); ++j)
{
char ch = words[i][j];
if(ch >= 'A' && ch <= 'Z')
ch += 32;
if(strline1.find(ch) != -1)
flag1 = 1;
else if(strline2.find(ch) != -1)
flag2 = 1;
else
flag3 = 1;
if(flag1 + flag2 + flag3 > 1)
break;
}
if(j == words[i].size())
res.push_back(words[i]);
}
return res;
}
};