题目概述:
给定一个单词列表,返回在键盘上只能用一排字母表示的单词。
思路:
对于给定的单词列表中的每一个单词,把这个单词写进一个新的单词列表里,先判断首字母在哪一排并记录下来,再针对这个单词余下的字母进行判断,若有字母和首字母不在同一排,就把这个单词从新的单词列表中删除。
示例:
Input: ["Hello", "Alaska", "Dad", "Peace"] Output: ["Alaska", "Dad"]
代码:
class Solution { public: vector<string> findWords(vector<string>& words) { set<char> str1={'q','w','e','r','t','y','u','i','o','p'}; set<char> str2={'a','s','d','f','g','h','j','k','l'}; set<char> str3={'z','x','c','v','b','n','m'}; vector<set<char>> str {str1,str2,str3};//把三排字母放在一个vector集合里 vector<string> word=words; vector<string> Word; int count=0; for(int i=0;i<word.size();i++) { if(word[i][0]>='A'&&word[i][0]<='Z') { word[i][0]+=32; }//先把字母变为小写 for(int k=0;k<3;k++) { if(str[k].count(word[i][0])!=0) count=k; }//记录首字母在哪一排 Word.push_back(words[i]);//放进新的单词列表 for(int j=1;j<word[i].size();j++) { if(word[i][j]>='A'&&word[i][j]<='Z') { word[i][j]+=32; } if(str[count].count(word[i][j])==0) { Word.pop_back(); break; } }//判断余下字母,若和首字母不在一排就删除 } return Word; } };
总结:
STL中vector:count() 算法用于统计等于某个值的对象的个数 。这里用count()算法,若某个字母存在,计算结果不等于0;若计算结果等于0,则不存在这个字母。