Java七巧板工作代码,有助于理解代码概念

时间:2019-03-27 23:58:05

标签: java

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创建了一个代码,但是我隐约地理解了它的功能,并想确保我完全理解了这个概念,因此首先我将两个参数放入新的字符串中,以转换为小写,如果ab不同,则为false。所以我创建了一个新的数组和int。一个带有新int的for循环,其中的值为charAt,但是为什么97显然是从a减去z呢?然后,它检查差异的增加和减少,并对b的值进行相同处理,并以值0的返回值结束。

1 个答案:

答案 0 :(得分:0)

我认为分阶段理解更清楚:

1)check数组跟踪在字符串a中看到的字母的频率减去在字符串b中看到的字母的频率。换句话说,在函数末尾,check[c-'a']表示字符'c'在字符串a中出现的次数减去它在字符串{{1中的出现次数}}。(b字符的ASCII码是97。

2)现在,从这里开始,您要确保a数组全为零-即:两个字符串中字符的频率是平衡的。如果是这样,则这两个字符串是字谜。如果不是,则计算出的check值将是校验数组的绝对值之和。