原题链接:500. Keyboard Row。
挑选出字母在键盘上是同一行的单词。
解法
这里使用unordered_set
散列容器,它是无序列集合,不包含重复元素,便于查找。
vector<string> findWords(vector<string>& words) {
unordered_set<char> row1 = { 'q','w','e','r','t','y','u','i','o','p' };
unordered_set<char> row2 = { 'a','s','d','f','g','h','j','k','l' };
unordered_set<char> row3 = { 'z','x','c','v','b','n','m' };
vector<unordered_set<char>> rows = { row1, row2, row3 };
vector<string> res;
for (auto word : words) {
int row;
for (int i = 0; i < 3; i++) {
if (rows[i].count((char)tolower(word[0])) > 0) {
row = i;
break;
}
}
res.push_back(word);
for (int j = 1; j < word.size(); j++) {
if (rows[row].count((char)tolower(word[j])) <= 0) {
res.pop_back();
break;
}
}
}
return res;
}
参考:
最后更新于2017年6月27日。