public static boolean anagramTest(String one, String two){ // two parameter and boolean (true or false)
String a = one.toLowerCase(); // making value into lower case
String b = two.toLowerCase();
if (a.length() != b.length()){ // if value in a is not equal to b, return false
return false;
}
int[] check = new int[50]; // new array called counter with 50 space
int difference = 0; // new int labled checker
for (int i=0;i<a.length(); i++){ // for loop for first length
int o = (int) a.charAt(i) - 97; //making char into array index, a numeric value for a?
if (check[o] >= 0){ // ---
difference++;
} else {
difference--; // ---
}
check[o]++; // ----
int t = (int) b.charAt(i) - 97; //making char into array index
if (check[t] <= 0){
difference++;
} else {
difference--;
}
check[t]--;
}
}
我在在线资源的帮助下使用main
创建了一个代码,但是我隐约地理解了它的功能,并想确保我完全理解了这个概念,因此首先我将两个参数放入新的字符串中,以转换为小写,如果a
与b
不同,则为false
。所以我创建了一个新的数组和int。一个带有新int的for循环,其中的值为charAt
,但是为什么97
显然是从a
减去z
呢?然后,它检查差异的增加和减少,并对b
的值进行相同处理,并以值0
的返回值结束。
答案 0 :(得分:0)
我认为分阶段理解更清楚:
1)check
数组跟踪在字符串a
中看到的字母的频率减去在字符串b
中看到的字母的频率。换句话说,在函数末尾,check[c-'a']
表示字符'c'
在字符串a
中出现的次数减去它在字符串{{1中的出现次数}}。(b
字符的ASCII码是97。
2)现在,从这里开始,您要确保a
数组全为零-即:两个字符串中字符的频率是平衡的。如果是这样,则这两个字符串是字谜。如果不是,则计算出的check
值将是校验数组的绝对值之和。