Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何检查两个字符串是否为;兄弟串;?_Algorithm - Fatal编程技术网

Algorithm 如何检查两个字符串是否为;兄弟串;?

Algorithm 如何检查两个字符串是否为;兄弟串;?,algorithm,Algorithm,如果字符串A和字符串B包含相同的字符,则称为“兄弟字符串”。 例如:“abc”和“cab”、“aabb”和“baab”。 问题是如何检查两个字符串是否为兄弟字符串(fast)?如何设置一个包含所有字符的数组,以及如何计算a的b的数量等 然后比较两个数组的对它们进行排序,然后进行比较,或者在某种排序的映射中保留每个字符的计数,然后在末尾比较计数。在这种情况下,最快的算法的复杂度为O(n),其中n是最长字符串的长度 实际上,在O(n)中,您可以创建一个数组(每个字符串一个),其中存储字符。此外,您还

如果字符串A和字符串B包含相同的字符,则称为“兄弟字符串”。
例如:“abc”和“cab”、“aabb”和“baab”。

问题是如何检查两个字符串是否为兄弟字符串(fast)?

如何设置一个包含所有字符的数组,以及如何计算a的b的数量等
然后比较两个数组的

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

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


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

只需计算每个字符在字符串中出现的次数即可。然后比较两个字符串的计数

如果字符串始终是ASCII或某些8位编码,那么简单数组就足以进行计数


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

让我显示我的变体。每个字符都有其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);
}

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

在python中,类似于:

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

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

你有一个字母表,因此可编码字符的数量是已知的和有限的。Bucket对字符串进行排序,并在
O(n)
中进行比较。关于最简单的方法:
sorted(a)==sorted(b)
(Python)这是一个简单的例子,那么它是哪一个呢?分类还是计数?这两个选项的区别是什么?计数是O(n),排序取决于你使用的方法。计数很容易。。。生成两个26整数数组,遍历字符串,并为字符串中的每个字符递增相应的计数器。最后,你对计数器进行异或运算,如果一切都为0,那么它们就是兄弟。如果我理解他描述的正确,字符串的长度必须相同。我不知道你在说什么。@AurelioDeRosa,我知道大O符号的意思。但我不知道你的回答和这个问题有什么关系。您将讨论创建一些数组,然后进行一些测试。但是现在还不清楚你想创建什么数组,你想执行什么测试。我想我是在和专业程序交谈,所以很明显,在这种情况下,“测试”意味着比较(逐字符),数组将包含字符串的字符。我必须写代码吗?我不想这样做。我不想为别人做这项工作。我就如何进行给出了我的想法和建议,仅此而已。选民:介意评论一下你认为这个答案有什么问题吗?