Given a List of words, return the words that can be typed using letters of alphabet on only one row’s of American keyboard like the image below.
这道题其实就是简单的把字母表分行存入2个set中,利用Insert函数,然后再利用find函数去找是否在第一个字母的set里面。注意这里的字母大小写,因为属于判断类的题,完全可以把字符串复制给一个string再去判断是否在同一行。
代码如下:
class Solution {
public:
vector<string> findWords(vector<string>& words) {
set<char>s1;
set<char>s2;
set<char>s3;
s1.insert('q');s1.insert('w');s1.insert('e');s1.insert('r');s1.insert('t');s1.insert('y');s1.insert('u');s1.insert('i');
s1.insert('o');s1.insert('p');
s2.insert('a');
s2.insert('s');
s2.insert('d');
s2.insert('f');
s2.insert('g');
s2.insert('h');
s2.insert('j');
s2.insert('k');
s2.insert('l');
s3.insert('z');
s3.insert('x');
s3.insert('c');
s3.insert('v');
s3.insert('b');
s3.insert('n');
s3.insert('m');
vector<string>c;
for(int i=0;i<words.size();i++){
string word=words[i];
for(int j=0;j<word.size();j++){
if(word[j]>='A'&&word[j]<='Z')
{
word[j]+=32;
}
}
bool fl=true;
int flag=0;
if(s1.find(word[0])!=s1.end()){
flag=1;
}
else if(s2.find(word[0])!=s2.end()){
flag=2;
}
else if(s3.find(word[0])!=s3.end()){
flag=3;
}
for(int j=0;j<word.size();j++){
if(flag==1){
if(!(s1.find(word[j])!=s1.end())){
fl=false;
break;
}
}
else if(flag==2){
if(!(s2.find(word[j])!=s2.end())){
fl=false;
break;
}
}
else{
if(!(s3.find(word[j])!=s3.end())){
fl=false;
break;
}
}
}
if(fl==true){
c.push_back(words[i]);
}
}
return c;
}
};