500. 鍵盤行
給你一個字符串數組 words ,只返回可以使用在 美式鍵盤 同一行的字母打印出來的單詞。鍵盤如下圖所示。
美式鍵盤 中:
第一行由字符 “qwertyuiop” 組成。
第二行由字符 “asdfghjkl” 組成。
第三行由字符 “zxcvbnm” 組成。
示例 1:輸入:words = ["Hello","Alaska","Dad","Peace"]
輸出:["Alaska","Dad"]
示例 2:輸入:words = ["omk"]
輸出:[]
示例 3:輸入:words = ["adsdf","sfd"]
輸出:["adsdf","sfd"]
提示:
- 1 <= words.length <= 20
- 1 <= words[i].length <= 100
- words[i] 由英文字母(小寫和大寫字母)組成
解題思路
使用3個set分別記錄鍵盤每一行的所有字符,對每個字符串判斷,是否字符串的每個字符都屬于屬于鍵盤的同一行
代碼
class Solution {
public:vector<string> findWords(vector<string> &words) {vector<string> res;unordered_set<char> set1{'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'};unordered_set<char>set2{'a', 's', 'd', 'f', 'g', 'h','j', 'k', 'l'};unordered_set<char>set3{'z', 'x','c', 'v','b', 'n','m'};for (string s:words) {int i = 0;for (; i < s.length(); ++i) {if (set1.find(tolower(s[i])) == set1.end())break;}if (i == s.length()) {res.push_back(s);continue;}i = 0;for (; i < s.length(); ++i) {if (set2.find(tolower(s[i])) == set2.end())break;}if (i == s.length()) {res.push_back(s);continue;}i = 0;for (; i < s.length(); ++i) {if (set3.find(tolower(s[i])) == set3.end())break;}if (i == s.length()) {res.push_back(s);continue;}}return res;}
};