【鏈接】: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.
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 RowAuthor:herongweiTime:2017/2/8 13:10language:C++http://blog.csdn.net/u013050857***********************/#PRagma comment(linker,"/STACK:102400000,102400000")#include <bits/stdc++.h>#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>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//zxcvbnmOutput: ["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;新聞熱點
疑難解答