[CrackCode] 1.4 Write a method to decide if two strings are anagrams or not

来源:互联网 发布:手机天文软件 编辑:程序博客网 时间:2024/05/21 08:57

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);}}}

0 0
原创粉丝点击