在给定字符串中查找所有非重复字符
Finding ALL Non Repeating characters in a given string
所以我得到了一个问题:
查找给定字符串中的所有非重复字符;
在做了一些谷歌搜索后,我很清楚找到第一个非重复字符是很常见的。我找到了很多如何做到这一点的例子,但我还没有真正找到任何关于如何找到所有非重复字符而不仅仅是第一个字符的信息。
到目前为止,我的示例代码是:
#include <iostream>
#include <unordered_map>
using namespace std;
char findAllNonRepeating(const string& s) {
unordered_map<char, int> m;
for (unsigned i = 0; i < s.length(); ++i) {
char c = tolower(s[i]);
if (m.find(c) == m.end())
m[c] = 1;
else
++m[c];
}
auto best = m.begin();
for (auto it = m.begin(); it != m.end(); ++it)
if (it->second <= best->second)
best = it;
return (best->first);
}
int main()
{
cout << findAllNonRepeating("dontknowwhattochangetofindallnonrepeatingcharacters") << endl;
}
我不确定我需要更改或添加什么才能找到所有非重复字符。
k、f、p、s 应该是此字符串中的非重复字符。
任何提示或想法都非常感谢!
按照建议,只需保留频率图即可。然后,处理字符串后,循环访问映射,仅返回那些只出现一次的值。
#include <iostream>
#include <map>
#include <vector>
using namespace std;
std::vector<char> nonRepeating(const std::string& s)
{
std::map<char, int> frequency;
for(int i=0;i<s.size();i++)
{
frequency[s[i]]++;
}
std::vector<char> out;
for(auto it = frequency.begin(); it != frequency.end(); it++)
{
if(it->second == 1)
out.push_back(it->first);
}
return out;
}
int main() {
// your code goes here
std::string str = "LoremIpsum";
for(char c : nonRepeating(str))
{
std::cout << c << std::endl;
}
return 0;
}
相关文章:
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 查找字符在两个索引之间出现的次数
- 使用连续字符及其路径查找矩阵中最长路径的长度
- 在字符串中查找一对字符
- 在字符数组 (C++/根) 中查找双精度值
- C++ char 类查找字符索引
- 拆分字符串输入并查找字符是否有效
- 查找和比较两个字符串中的字符
- 从输入 1 查找输入 2 中字符的位置
- 查找单个字符串中重复次数最多和次数第二多的字符
- 如何查找两个字符串 c++ 中常用字符的数量
- 视觉C++查找以 "ing" 结尾且少于或等于 10 个字符的单词
- 如何从链表指针字符中查找字符
- 查找字符串中存在的不同字符
- LPCWSTR 查找和替换为转义字符
- 在C 中查找非空格字符
- 使用哈希 C++ 查找具有 k 个不同/唯一字符的最长子字符串
- 查找字符数组中的数字总和
- 提升正则表达式 cpp 用于查找 %% 之间的字符串,输出不包括 % 字符本身
- 查找并列出字符串C++中的所有字符簇