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

Bre*_*ent 8 java string string-comparison

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

abc, bca -> true
aaa, aaa -> true
aab, bba -> false
abc, def -> false
Run Code Online (Sandbox Code Playgroud)

Gar*_*ryF 22

将每个字符串转换为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);
}
Run Code Online (Sandbox Code Playgroud)

  • 不,如果我们删除重复项,那么"aab,bba"将返回true并指定为返回false. (7认同)

Jea*_*ean 7

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

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