如何检查两个字符串是否是“兄弟字符串”?

时间:2011-10-08 14:20:07

标签: algorithm

如果字符串A和字符串B包含相同的字符,则称为“兄弟字符串” 例如:“abc”和“cab”,“aabb”和“baab” 问题是如何检查两个字符串是否为兄弟字符串(快速)?

7 个答案:

答案 0 :(得分:5)

对它们进行排序然后比较,或者在某种地图中保留每个字符的计数,然后比较最后的计数。

答案 1 :(得分:2)

只计算字符串中每个字符的出现次数。他们比较了你所拥有的两个琴弦的数量。

如果字符串始终是ASCII或一些8位编码,则简单数组足以用于计数。

如果它们可以包含Unicode字符,请使用哈希映射。

答案 2 :(得分:0)

如何拥有所有角色的数组并计算一个b的数量等等' 而不是比较两个数组的

答案 3 :(得分:0)

在这种情况下,最快的算法具有O(n)的复杂度,其中n是最长字符串的长度。

事实上,在O(n)中,您可以创建一个存储字符的数组(每个字符串一个)。此外,你需要另外O(n)时间来进行测试。

答案 4 :(得分:0)

让我展示我的变体。每个char都有其int ASCII值。所以我认为,你可以将两个字符串的所有字符相乘并比较两个产品。例如:

private static boolean compareForBrother(String s1, String s2) {
    long lProduct= 1L;
    for (byte b : s1.getBytes()) {
        lProduct *= b;
    }

    long lProduct2= 1L;
    for (byte b : s2.getBytes()) {
        lProduct2 *= b;
    }

    return (lProduct2 == lProduct);
}

答案 5 :(得分:0)

比较每个字符串中的字符集。

在python中,类似于:

if set(stringA) == set(stringB):
    print("%s and %s are brother strings" % (stringA, stringB))

答案 6 :(得分:0)

准备字符频率的直方图;这是与基数排序完全相同的过程。然后比较直方图。