500 键盘行(简单题)
1.题目:给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
2.解题思路
- 将所有数字分为三组,分组标准为 该字母所在行数 ,比如说‘a’在第二行,‘z’在第三行。然后将所有字母按a-z的顺序,将他们的行数整合成一个字符串。也就是(0代表第一行,依次类推):
- 遍历题目给出的每一个字符串。
- 在遍历过程中,先提取出每个字符串的第一个字符,得出该字符的行数(重点)。
- 得出行数后,开始遍历该字符串的每一个字符,得出该字符的行数,再和该字符串的第一个字符的行数比对,如果相同,则继续遍历,直到结束,也就意味着该字符串属于同一行;如果不同,则break。开始遍历下一个处理下一个字符串。
- 关于如何得出字母的行数:
首先将该字母小写化(tolower(char))
再求与’a’的差 tolower(char)-‘a’
在根据这个下标,找到前面说的行数字符串,找到为该下标的值。即:
3.代码
class Solution {
public:
vector<string> findWords(vector<string>& words) {
vector<string> return_str;
string str="12210111011122000010020202";
for(string &word : words){
bool flag=true;
//判定第一个字符为哪一行的
char temp=str[tolower(word[0])-'a'];
for(int i=1;i<word.size();i++){
if(str[tolower(word[i])-'a']!=temp){
flag=false;
break;
}
}
if(flag){
return_str.emplace_back(word);
}
}
return return_str;
}
};