检查 2 个字符串是否包含相同的字符?

2022-09-03 03:43:47

有没有办法检查两个字符串是否包含相同的字符。例如

abc, bca -> true
aaa, aaa -> true
aab, bba -> false
abc, def -> false

答案 1

将每个字符串转换为 char[],对该数组进行排序,然后比较两者。

private boolean sameChars(String firstStr, String secondStr) {
  char[] first = firstStr.toCharArray();
  char[] second = secondStr.toCharArray();
  Arrays.sort(first);
  Arrays.sort(second);
  return Arrays.equals(first, second);
}

答案 2

一种非常简单但不是很有效的方法是,将你的s转换为char数组,并在它们上使用java.util.Arrays.sort,取回s并比较相等。如果你的字符串少于几千个字符,那应该很好。StringString

如果您有几兆字节的字符串,则可能需要创建一个数组,其中包含每个字符的计数(将其代码用作索引),对一个字符串进行一次传递,在每个字符的计数上添加一个,并在第二个字符串上进行一次传递以删除一个字符串。如果您在第二次通过期间的任何时候都低于 0,则它们没有相同的字符。当您完成第二个字符串而没有错误时,如果它们具有相同的长度,则可以确保它们具有相同的字符(无论如何,您应该首先检查)。
第二种方法比对字符串进行排序要复杂得多,如果你想使用unicode字符串,它需要一个大数组,但是如果你只使用ascii集的128个字符,并且速度更快,那就太好了。
如果您的字符串中没有几百万个字符,请不要为此烦恼。对字符串进行排序要容易得多,并且在只有几十个字符的字符串上不会明显变慢。