**
力扣500键盘行
**
- 键盘行 给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
第一行由字符 “qwertyuiop” 组成。 第二行由字符 “asdfghjkl” 组成。 第三行由字符 “zxcvbnm” 组成。
American keyboard
示例 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]
由英文字母(小写和大写字母)组成 通过次数50,932提交次数68,492
class Solution {
public:
vector<string> findWords(vector<string>& words) {
/*
基本的思路
创建一个动态的字符串数组(更加地节省系统的资源)
将每一个单词先存储进这个数组
但是再后面经过检查之后
假如这个单词不符合题目要求,就把这个单词弹出来
*/
//现在对26个英文字母进行的规定
string wordsNums = "12210111011122000010020202";
//重点,这个是创建一个字符串数组
vector<string> returnWords;
for (int i = 0; i < words.size(); i++) {
string s = words[i];
//假如s[0] = B,那么tolower[tolower(s[0]) - 'a'] =
//将这个单词里面的 第一个字母 进行转化为和上面规定的行数规则一样
int firstWordNum = wordsNums[tolower(s[0]) - 'a'];
returnWords.push_back(s);
//j = 1开始就可以了
for (int j = 1; j < s.size(); j++) {
if (wordsNums[tolower(s[j]) - 'a'] != firstWordNum) {
returnWords.pop_back();
break;
}
}
}
return returnWords;
}
};
/*
执行结果:
通过
显示详情
添加备注
执行用时:
0 ms
, 在所有 C++ 提交中击败了
100.00%
的用户
内存消耗:
6.6 MB
, 在所有 C++ 提交中击败了
80.16%
的用户
通过测试用例:
22 / 22