leetcode-242-有效的字母异位词

问题:

package com.example.demo;

import java.util.Arrays;

public class Test242 {

    /**
     * 判断是否是异位词
     * 分析:  (问题提示:都是小写字母的情况)
     * 利用桶站位,假如是异位词,则这两个字符串的长度相等,则遍历字符串,将第一个字符串中存在的字符时,在桶中+1,
     * 在第二个存在的字符,则桶中-1,当遍历完成之后,遍历数组,是否所有的位置都是0,如果都是0,则是异位,不都是0,则不是异位
     */
    public boolean isAnagram(String s, String t) {
        int len1 = s.length();
        int len2 = t.length();
        if (len1 != len2) {
            return false;
        }

        int cur = 0;
        int[] bucket = new int[26];
        while (cur < len1) {
            // 都是小写字母的情况
            int index1 = s.charAt(cur) - 'a';
            bucket[index1]++;
            int index2 = t.charAt(cur) - 'a';
            bucket[index2]--;
            cur++;
        }
        for (int i : bucket) {
            if (i != 0) {
                return false;
            }
        }
        return true;
    }

    /**
     * 方法二:利用排序和比较字符串
     */
    public boolean isAnagram1(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        char[] chars = s.toCharArray();
        char[] chars1 = t.toCharArray();
        Arrays.sort(chars);
        Arrays.sort(chars1);
        return Arrays.equals(chars, chars1);
    }

    public static void main(String[] args) {
        Test242 t = new Test242();
        boolean anagram = t.isAnagram1("asdf", "fdas");
        System.out.println(anagram);
    }
}

猜你喜欢

转载自www.cnblogs.com/nxzblogs/p/11274716.html