键盘行&&独一无二的字符串
【摘要】 500. 键盘行https://leetcode.cn/problems/keyboard-row/class Solution {public: vector<string> findWords(vector<string>& words) { //建立键盘每一行的字符和行的映射关系,然后遍历vector 如果一个字符串中的所有字符都对应在键盘当中的同一行,则满足要求...
500. 键盘行
class Solution {
public:
vector<string> findWords(vector<string>& words) {
//建立键盘每一行的字符和行的映射关系,然后遍历vector 如果一个字符串中的所有字符都对应在键盘当中的同一行,则满足要求
unordered_map<char,int> um;//字符 - 对应在键盘的哪一行
//因为未知是大小写的,所以把大小写对应的都映射到哈希表中
string line1 = "qwertyuiopQWERTYUIOP";//键盘第一行的字符
string line2 = "asdfghjklASDFGHJKL";//键盘第二行的字符
string line3 = "zxcvbnmZXCVBNM";//键盘第三行的字符
//分别建立每一行的建立映射关系
for(auto ch:line1)
{
um[ch] = 1;//第一行的字符的value设置为1
}
for(auto ch : line2)
{
um[ch] = 2;//第二行的字符的value设置为2
}
for(auto ch :line3)
{
um[ch] = 3;//第三行的字符的value设置为3
}
for(auto kv:um)
{
cout <<kv.first<<" "<<kv.second<<endl;
}
vector<string> ans;//存储符合要求的字符串
//遍历容器
for(auto word : words)
{
//word是一个string字符串
//遍历word,检测word是否每一个字符都在同一行
cout <<"word[0]"<<word[0]<<endl;
int row = um[word[0]];//当前字符串的第一个字符所在的行号
bool flag = true;//标志当前字符串是否符合标准
for(auto ch:word)
{
if(um[ch] != row)//字符不是在同一行
{
flag = false;
break;//判断下一个字符串
}
}
if(flag)
{
ans.push_back(word);
}
}
return ans;
}
};
优化一下代码:用vector
存放每一行对应的字符(大小写)
class Solution {
public:
vector<string> findWords(vector<string>& words) {
unordered_map<char,int> um;//映射关系:字符 - 在第几行
//用一个容器每一行的字符,就不用显得这么繁琐
vector<string> v{
"qwertyuiopQWERTYUIOP",
"asdfghjklASDFGHJKL",
"zxcvbnmZXCVBNM"
};
//建立每一行的映射关系
for(int i = 0 ; i<3;i++)
{
//v[i] ->string
for(auto ch:v[i])
{
um[ch] = i;
}
}
//遍历words容器,找到同一行的字母的单词
vector<string> ans ;//记录答案
for(auto word:words)
{
//word->string对象
int row = um[word[0]];//记录当前string对象第一个字符所在的行号
bool flag = true;
//判断后序字符和row是否在同一行
for(auto ch:word)
{
if(um[ch] != row)
{
flag = false;
break;
}
}
if(flag)
{
ans.push_back(word);
}
}
return ans;
}
};
2053. 数组中第 K 个独一无二的字符串
https://leetcode.cn/problems/kth-distinct-string-in-an-array/
方法:
第一次遍历容器,统计每个字符串出现次数
第二次遍历容器,找到第k个只出现一次的字符串
每次遇到一个出现一次的字符串就k–.当k为0时,该字符串就是第k个只出现一次的字符串
class Solution {
public:
string kthDistinct(vector<string>& arr, int k) {
//找到第k个只出现1次的字符串
unordered_map<string,int> um;//字符串- 出现次数
//遍历数组,统计每个字符串的出现次数
for(auto str:arr)
{
um[str]++;
}
//再次遍历数组,找到第k个只出现1次的字符串
for(auto str:arr)
{
if(um[str] == 1)
{
k--;
}
//如果k减到0了.说明当前字符串就是第k个只出现1次的字符串
if(k == 0)
{
return str;
}
}
return string();//返回空string匿名对象
}
};
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)