LeetCode: 500 Keyboard Row (easy)
题目:
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.
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.
代码:
class Solution { public: vector<string> findWords(vector<string>& words) { map<char, int> m; vector<char> s1 = {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'}; vector<char> s2 = {'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'}; vector<char> s3 = {'z', 'x', 'c', 'v', 'b', 'n', 'm'}; for (auto c : s1) m.insert(pair<char, int> (c, 1)); for (auto c : s2) m.insert(pair<char, int> (c, 2)); for (auto c : s3) m.insert(pair<char, int> (c, 3)); vector<string> result; for (auto w : words){ bool b = 1; #判断是否在一行 char first = tolower(w[0]); int i = m[first]; for (auto c : w ){ c = tolower(c); int j = m[c]; if (j != i){ b = 0; break; } } if (b) result.push_back(w); } return result; } };
别人的:
1 class Solution { 2 public: 3 vector<string> findWords(vector<string>& words) { 4 5 vector<string> ans; 6 unordered_set<char> row1{ 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p' }; 7 unordered_set<char> row2{ 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l' }; 8 unordered_set<char> row3{ 'z', 'x', 'c', 'v', 'b', 'n', 'm' }; 9 10 for(string word:words){ 11 int one = 0, two = 0, three = 0; 12 for(char c:word){ 13 if(row1.count(c)) one = 1; 14 if(row2.count(c)) two = 1; 15 if(row3.count(c)) three = 1; 16 if(one+two+three > 1) break; 17 } 18 19 if(one + two + three == 1) ans.push_back(word); 20 } 21 22 return ans; 23 24 } 25 };
ASCII编码:http://www.doc88.com/p-951217962470.html