Мне очень нравится решение JRL, поскольку оно довольно элегантное.В то же время я чувствую, что, поскольку есть решение, которое на порядок лучше, я должен поделиться им.Это менее элегантно, но это O(n)
вместо O(n lg n)
.
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(str1.charAt(i)) {
counts.put(str1.charAt(i),counts.get(star1.charAt(i)) - 1);
} else {
counts.put(str1.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;