c-使用ASCII值确定A是否为B的置换

我编写了一个函数来确定字符串a是否为字符串b的排列.定义如下:

bool isPermutation(std::string a, std::string b){
    if(a.length() != b.length())
        return false;
    int a_sum, b_sum;
    a_sum = b_sum = 0;
    for(int i = 0; i < a.length(); ++i){
        a_sum += a.at(i);
        b_sum += b.at(i);
    }
    return a_sum == b_sum;
}

我的方法的问题是,如果a = 600000和b = 111111,则该函数返回true.

有什么办法可以保持我对这个问题的一般方法(而不是对字符串进行排序然后再执行strcmp)并保持正确性?

解决方法:

您可以分别计算字符:

bool isPermutation(std::string a, std::string b)
{
    if(a.length() != b.length())
        return false;

    assert(a.length() <= INT_MAX);
    assert(b.length() <= INT_MAX);

    int counts[256] = {};
    for (unsigned char ch : a)
        ++counts[ch];
    for (unsigned char ch : b)
        --counts[ch];
    for (int count : counts)
        if (count)
            return false;

    return true;
}
上一篇:python – 在n个bin中生成k个球的所有可能结果(多项式/分类结果的总和)


下一篇:Android USB转串口通信