如果字符串A和字符串B包含相同的字符,则称为“兄弟字符串” 例如:“abc”和“cab”,“aabb”和“baab” 问题是如何检查两个字符串是否为兄弟字符串(快速)?
答案 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)
准备字符频率的直方图;这是与基数排序完全相同的过程。然后比较直方图。