【发布时间】:2017-03-07 06:04:34
【问题描述】:
我有一个函数,通过将每个字符作为键来使用 std::map 检查字符串是否包含重复项。无法弄清楚为什么这不起作用。
#include<iostream>
#include<map>
#include<string>
int unique_char(std::string s){
for(int i=0 ; i < s.size(); i++ )
{
std::map<char,int> uniq_hash_table;
std::pair<std::map<char,int>::iterator,bool> ret;
ret = uniq_hash_table.insert(std::pair<char,int>(s[i],0));
if(ret.second==false)
{
std::cout << "The string contains duplicates" << std::endl;
return 1;
}
}
return 0;
}
int main()
{
std::string s="abcd";
std::string s1="aabc";
if(unique_char(s)==0){
std::cout << "The 1st string does not contain duplicates" << std::endl;}
if(unique_char(s1)==0){
std::cout << "The 2nd string does not contain duplicates" << std::endl;}
return 0;
}
程序为这两个示例返回“字符串不包含重复项”。
ps:我故意使用 std::map 来获得 O(n) 解决方案。
【问题讨论】:
-
"uniq_hash_table" 是一个极具误导性的名称...
-
当您似乎只需要一组地图时,为什么还要使用地图?
-
遗憾的是,我相信这是任务。今天下午我们有另一个提问者完成了类似的任务。不过,另一个提问者必须实现哈希表。
标签: c++ string dictionary