Cracking the Coding Interview Q1.3
1716 ワード
My Solution:
Solutions:
package chapter1;
/**
* Write a method to decide if two strings are anagrams or not.
*
* @author jd
*
*/
public class Q1_3 {
/**
* Assume the char set is extended ASCII, we check whether the two string
* have identical counts for each char.
*/
static boolean permutation(String a, String b) {
if (a == null)
return b == null;
int[] count = new int[256];
for (int i = 0; i < a.length(); i++) {
count[a.charAt(i)]++;
}
//this part is so nice
for (int i = 0; i < b.length(); i++) {
count[b.charAt(i)]--;
if (count[b.charAt(i)] < 0)
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 = permutation(word1, word2);
System.out.println(word1 + ", " + word2 + ": " + anagram);
}
}
}
Solutions:
public static boolean permutation(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] letters = new int[256];
char[] s_array = s.toCharArray();
for (char c : s_array) { // count number of each char in s.
letters[c]++;
}
for (int i = 0; i < t.length(); i++) {
int c = (int) t.charAt(i);
if (--letters[c] < 0) {
return false;
}
}
return true;
}