Java 如果两个字符串被重新排列,如何比较它们

Java 如果两个字符串被重新排列,如何比较它们,java,string,char,equals,Java,String,Char,Equals,我想知道如何比较两个重新排列的字符串 例如,如果字符串a=“String”,字符串b=“tsrngi”。。。如果我比较a.equals(b),由于字符的顺序,它将返回false。。。我希望它返回true,因为字符相同,但顺序不同。。谢谢对它们进行排序,然后进行比较。要进行排序,请使用以下方法: char[] content = unsorted.toCharArray(); java.util.Arrays.sort(content); String sorted = new String(co

我想知道如何比较两个重新排列的字符串
例如,如果字符串a=“String”,字符串b=“tsrngi”。。。如果我比较a.equals(b),由于字符的顺序,它将返回false。。。我希望它返回true,因为字符相同,但顺序不同。。谢谢

对它们进行排序,然后进行比较。要进行排序,请使用以下方法:

char[] content = unsorted.toCharArray();
java.util.Arrays.sort(content);
String sorted = new String(content);

我非常喜欢JRL的解决方案,因为它非常优雅。同时,我觉得,因为有一个解决方案是一个复杂的顺序,我应该更好地分享它。它不那么优雅,但它是
O(n)
而不是
O(n)

if(str1.length()!=str2.length())返回false;
映射计数=新的HashMap();
对于(int i=0;i
它很优雅,但它也需要
O(n lg n)
对于一个应该采取
O(n)
+1的操作,在我们的工艺中,“优雅”有很多含义,但在我看来,“优雅高效的执行”胜过“用更少的指令表达”几乎每次都是。好吧,无论如何,他的方法在某些情况下可能会更快。对于小集合,我的方法将招致严重的自动装箱和对象创建惩罚。(尽管有人对此非常关注,可以创建原始地图替代方案来解决这一问题)或者可以编写一个包装器,根据数据的大小调用其中任何一个。另外,请注意,这两个解决方案都不包括不等长检查,可以方便地放入包装器中。嗯,我的第一行不是不等长检查吗?是的,我想实验确定的他优于我的阈值是b有益的。类似于
if(str1.length()
Hah。欲速则不达。抱歉。错过了。
if(str1.length() != str2.length()) return false; 
Map<Character, Integer> counts = new HashMap<Character, Integer>();

for(int i = 0; i < str1.length(); i++) {
    // add 1 for count for str1
    if(counts.contains(str1.charAt(i)) {
        counts.put(str1.charAt(i),counts.get(star1.charAt(i)) + 1);
    } else {
        counts.put(str1.charAt(i),1);
    }
    // sub 1 for count for str2
    if(counts.contains(str2.charAt(i)) {
        counts.put(str2.charAt(i),counts.get(str2.charAt(i)) - 1);
    } else {
        counts.put(str2.charAt(i),-1);
    }
}
// when you're done, all values in the map should be 0. If they
// aren't all 0, you don't have equal-arranged strings.
for(Integer i : counts.values()) {
    if(i.intValue() != 0) return false;
}
// we made it this far, we know it's true
return true;