相关疑难解决方法(0)

优化经常使用的anagram函数

我写了一个函数来确定两个单词是否是字谜.单词A是单词B的字谜,如果你可以通过重新排列字母来构建单词B,例如:

lead is anagram of deal
Run Code Online (Sandbox Code Playgroud)

这是我的功能:

bool is_anagram(std::string const & s1, std::string const & s2)
{
    auto check = [](std::string const & x)
    {
        std::map<char, unsigned> counter;
        for(auto const & c : x)
        {
            auto it = counter.find(c);
            if(it == counter.end())
                counter[c] = 1;
            else
                ++counter[c];
        }
        return counter;
    };

    return check(s1) == check(s2);
}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但随着单词数量的增加(这个函数在我的应用程序中使用了数百万次),很快就成了我应用程序的主要瓶颈.

有没有人知道如何加快这个功能?

c++ string algorithm optimization anagram

29
推荐指数
4
解决办法
3317
查看次数

一种可能的算法,用于确定两个字符串是否是彼此的字谜?

我有这个想法(使用C语言)来检查由ASCII字母组成的两个字符串是否是彼此的字谜:

  1. 检查字符串是否长度相同.

  2. 检查两个字符串的所有字符的ASCII值之和是否相同.

  3. 检查两个字符串的所有字符的ASCII值的乘积是否相同.

我相信如果所有三个都是正确的,那么字符串必须是彼此的字谜.但是,我无法证明这一点.有人可以帮助我证明或反驳这会起作用吗?

谢谢!

c string algorithm math anagram

8
推荐指数
3
解决办法
5091
查看次数

标签 统计

algorithm ×2

anagram ×2

string ×2

c ×1

c++ ×1

math ×1

optimization ×1