242. 有效的字母异位词

 /**
     * 方法一
     * 将s he t 这两个字符串,重新排序
     * 先转换成数组,再使用Arrays方法,然后new 新的字符串对象
     * 最后使用equals方法比较
     * @param s
     * @param t
     * @return
     */
    public static boolean isAnagram(String s, String t) {
        char [] s1 = s.toCharArray();
        Arrays.sort(s1);
        String sortS = new String(s1);

        char[] t1 = t.toCharArray();
        Arrays.sort(t1);
        String sortT = new String(t1);

        if (sortT.equals(sortS)){
            return true;
        }else {
            return false;
        }
    }

    /**
     * 方法二
     * https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
     * 创建一个长度为26的数组record来装这些元素,[0,0,0,0,0,0……]
     * 然后遍历字符串s,对每一个char 减去 ‘a’,就能得到一个数字,也就是其在数组中的位置,然后将这个位置元素 + 1
     * 例子:
     * String s = "acdh"; String t = "cdha"
     * 我们遍历这个字符串s:
     *      a - a = 0;
     *      c - a = 2;
     *      d - a = 3;
     *      h - a = 7;
     * 因此record 就是 [1,0,1,1,0,0,0,7,……]
     *
     * 我们再遍历这个字符串t:
     *      c - a = 2;
     *      d - a = 3;
     *      h - a = 7;
     *      a - a = 0;
     * 因此我们对这些位置的数字-1
     *
     * 因此record就是 [0,0,0,0,0,……]
     * 最后我们判断record是否全部为0,是,则说明,s和t字母出现的次数一样,否则就不一样
     * @param s
     * @param t
     * @return
     */
    public static boolean isAnagram1(String s, String t) {
        int [] record = new int[26];

        for (int i = 0; i < s.length(); i++) {
            record[s.charAt(i) - 'a'] ++;
        }

        for (int i = 0; i < t.length(); i++) {
            record[t.charAt(i) - 'a'] -- ;
        }

        for (int item : record){
            if (item != 0){
                return false;
            }
        }
        return  true;
    }

你可能感兴趣的:(java,算法,数据结构)