【LeetCode】500. Keyboard Row

【链接】:keyboard-row
【描述】:
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.

【LeetCode】500. Keyboard Row_第1张图片
American keyboard

Example 1:
Input: [“Hello”, “Alaska”, “Dad”, “Peace”]
Output: [“Alaska”, “Dad”]
Note:
You may use one character in the keyboard more than once.
You may assume the input string will only contain letters of alphabet.
Subscribe to see which companies asked this question.
简单来说就是找字符串,该字符串的每个字母都要在美式键盘的同一行即可。
【思路】第一种方法三个set 集合存储键盘布局,利用set的find功能查找是否满足条件。第二种方法看了一下讨论区,强大的python,居然有子集功能!
【代码】:

/***********************
【LeetCode】500. Keyboard Row
Author:herongwei
Time:2017/2/8 13:10
language:C++
http://blog.csdn.net/u013050857
***********************/
#pragma comment(linker,"/STACK:102400000,102400000")
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long LL;
const int maxn = 1e5+10;
const int maxm = 55;
const LL MOD = 999999997;
int dir4[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
int dir8[8][2]= {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
inline LL read(){
    int  c=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){c=c*10+ch-'0';ch=getchar();}
    return c*f;
}
/*Input: ["Hello", "Alaska", "Dad", "Peace"]
//qwertyuiop
//asdfghjkl
//zxcvbnm
Output: ["Alaska", "Dad"]*/
class Solution1 {
public:
    vector<string> findWords(vector<string>& words) {
       int words_size=words.size();
       vector<string> ret;
        unordered_set <char> row1 = { 'q','Q','w','W','e','E','r','R','t','T','y','Y','u','U','i','I','o','O','p','P' };
        unordered_set <char> row2 = { 'a','A','s','S','d','D','f','F','g','G','h','H','j','J','k','K','l','L'};
        unordered_set <char> row3 = { 'z','Z','x','X','c','C','v','V','b','B','n','N','m','M'};

       for(auto &word:words){
          bool f1=f2=f3=true;
          for(auto &ch:word){
              if(f1){
                auto it=row1.find(ch);
                if(it==row1.end()) f1=false;
              }
              if(f2){
                auto it=row2.find(ch);
                if(it==row2.end()) f2=false;
              } 
              if(f3){
                auto it=row3.find(ch);
                if(it==row3.end()) f3=false;
              }
          }
          if(f1 || f2 || f3) ret.push_back(word);
       }
       return ret;
    }
};

class Solution2(object):
  def findWords(self, words):
    row1, row2, row3 = set('qwertyuiop'), set('asdfghjkl'), set('zxcvbnm');
    ret = [];
    for word in words:
      w = set(word.lower());
      if w.issubset(row1) or w.issubset(row2) or w.issubset(row3):
        ret.append(word);
    return ret;


你可能感兴趣的:(=====ACM=====,【算法总结】,LeetCode)