Write a method to decide if two strings are anagrams or not
============
Analysis:
Solution1, no extract space O(n^2).
Solution 2 and 3, O(n).
public class Answer {
public static boolean solution(String str1, String str2){
if (str1.length()!=str2.length()) return false;
for(int i=0; i<str1.length(); i++){
int j=0;
boolean found = false;
while (j<str2.length()) {
if(str1.charAt(i) == str2.charAt(j)){
if(j<str2.length()-1) str2 = str2.substring(0, j) + str2.substring(j+1);
else str2 = str2.substring(0,j);
found = true;
break; // character found
}
j++;
}
if (found == false) return false;
}
return true;
}
public static boolean solution2(String str1, String str2){
if(str1.length()!=str2.length()) return false;
int[] char_set = new int[256];
for(int i=0; i<str1.length(); i++){
char_set[str1.charAt(i)]++;
}
for(int i=0; i<str2.length(); i++){
if(char_set[str2.charAt(i)]==0) return false;
else char_set[str2.charAt(i)]--;
}
for(int i=0; i<char_set.length; i++){
if(char_set[i]!=0) return false;
}
return true;
}
public static boolean solution3(String str1, String str2){
char[] array1 = str1.toCharArray();
char[] array2 = str2.toCharArray();
Arrays.sort(array1);
Arrays.sort(array2);
for (int i=0; i<array1.length; i++){
if (array1[i] != array2[i]) return false;
}
return true;
}
public static void main(String[] args) {
String[][] pairs = {{"apple", "papel"}, {"carrot", "tarroc"}, {"hello", "llloh"}};
for (String[] pair : pairs) {
String word1 = pair[0];
String word2 = pair[1];
boolean anagram = solution2(word1, word2);
System.out.println(word1 + ", " + word2 + ": " + anagram);
}
}
}