In this Leetcode Keyboard Row problem solution Given an array of strings words, return the words that can be typed using letters of the alphabet on only one row of American keyboard.
Problem solution in Python.
class Solution: def findWords(self, words: List[str]) -> List[str]: rows = [set("qwertyuiop"),set("asdfghjkl"),set("zxcvbnm")] return [w for w in words if any(s&set(w.lower())==set(w.lower()) for s in rows)]
Problem solution in Java.
public String[] findWords(String[] words) { List<String> sameRowList = new ArrayList<String>(); for(String word : words) { if(findWordInSameRow(word)) { sameRowList.add(word); } } String[] samwWords = new String[sameRowList.size()]; samwWords = sameRowList.toArray(samwWords); return samwWords; } public boolean findWordInSameRow(String word) { String keyBoard = "qwertyuiopasdfghjkl&zxcvbnm&&&"; char[] charWord = word.toLowerCase().toCharArray(); int row = keyBoard.indexOf(charWord[0]) / 10; for(char c : charWord) { if(row != keyBoard.indexOf(c) / 10) { return false; } } return true; }
Problem solution in C++.
class Solution {
public:
Solution(){
hash.resize(26);
vector<string> key{"qwertyuiop","asdfghjkl","zxcvbnm"};
for(int i=0;i<key.size();i++){
for(auto j: key[i])
hash[j-'a']=i;
}
}
vector<string> findWords(vector<string>& words) {
vector<string> re;
for(auto i : words){
if(same(i)&&i.size())
re.push_back(i);
}
return re;
}
bool same(string str){
if(!str.size()) return true;
int cur = hash[tolower(str[0])-'a'];
for(int i=1;i<str.size();i++){
if(hash[tolower(str[i])-'a']!=cur)
return false;
}
return true;
}
private:
vector<int> hash;
};