c++ - 哪种数据结构更适合用于查找句子是否包含唯一字符?

标签 c++ algorithm data-structures dictionary

我正在尝试解决一项任务,但不确定我是否为其使用了合适的数据结构。我的任务是查找句子是否包含唯一字符,并因此返回 bool 值。

这是我的功能:

bool use_map(string sentence) {
    map<int, string> my_map;

    for (string::size_type i = 0; i <= sentence.length(); i++) {
        unsigned int index = (int)sentence[i];    
        if (my_map.find(index) != my_map.end())
            return false;       
        my_map[index] = sentence[i];
    }

    return true;    
}

我只找到适合我的 map 结构。也许我错过了什么?

也许在 PHP 中使用动态数组之类的东西更好?


我正在尝试使用哈希表解决方案。

最佳答案

其他答案建议std::set这是一个解决方案。但是,他们复制了 std::set 中的所有字符然后得到 set 的大小.你真的不需要这个,你可以避免它,使用 std::set::insert 的返回值.像这样的东西:

std::set< char > my_set;
for (std::string::size_type ii = 0; ii < sentence.size(); ++ii) 
{
    if( ! my_set.insert( sentence[ ii ] ).second )
    {
        return false;
    }
}

这样你会:

  • 停在第一个重复的字符上,您将不会(不必要地)复制整个字符串
  • 你将避免不必要的转换为int在你的代码中
  • 将节省内存——如果你实际上不需要你std::map< int, std::string >::second

此外,确保您需要“计算”所有 char s 或者您想跳过其中的一些(例如空格、逗号、问号等)

关于c++ - 哪种数据结构更适合用于查找句子是否包含唯一字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14801288/

相关文章:

c - 在这种情况下我应该使用什么样的数据结构?

c++ - 如何在不使用信号槽连接的情况下触发 Action ?

ruby - 给定数的所有因数

java - 给定 "sub-grid"和 "cell-in-the-sub-grid"索引,如何获取数独二维数组索引?

algorithm - 仅通过公共(public)交通找到最佳路线的策略?

c++ - 为什么结构尺寸不正确

c++ - 将 Rcpp::NumericVector 转换为 Eigen::VectorXd

c++ - 将字符串集中的元素添加到字符串集的 vector 中

c++ - 是否可以从 DB2 存储过程/触发器调用 c/c++ 应用程序?

algorithm - 使用 O(1) 空间的运行长度编码