文章目录
题目
解题代码
- 字母大小写翻转–a^32
- 字母全转小写–a|32
- 字母全转大写–a&-33
法一:哈希表存储
class Solution {
public:
unordered_set<char>check[3];
void update(string & s,int p){//更新三个哈希表
for(auto&& t:s){
check[p-1].insert(t);
}
}
bool isOk(string& s){//判断字符串是否在同一行
int i;
for(i=0;i<3;i++){//先判断可能在哪一行
if(check[i].count(s[0]|32))
break;
}
for(auto&&t:s){
if(!check[i].count(t|32))//统一转小写判断
return false;
}
return true;
}
vector<string> findWords(vector<string>& words) {
vector<string>res;
string s1 = "qwertyuiop";
string s2 = "asdfghjkl";
string s3 = "zxcvbnm";
update(s1,1),update(s2,2),update(s3,3);
for(auto&&t:words){
if(isOk(t)){
res.push_back(t);
}
}
return res;
}
};
法二:字母映射行
class Solution {
public:
vector<string> findWords(vector<string>& words) {
vector<string> ans;
string rowIdx = "12210111011122000010020202";
for (auto & word : words) {
bool isValid = true;
char idx = rowIdx[(word[0]|32) - 'a'];
for (int i = 1; i < word.size(); ++i) {
if(rowIdx[(word[i]|32) - 'a'] != idx) {
isValid = false;
break;
}
}
if (isValid) {
ans.emplace_back(word);
}
}
return ans;
}
};