1. 程式人生 > 其它 >242. 有效的字母異位詞(java實現)--LeetCode

242. 有效的字母異位詞(java實現)--LeetCode

技術標籤:演算法題HashMap演算法題leetcode演算法java

文章目錄

題目

242. 有效的字母異位詞

給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的字母異位詞。

示例 1:

輸入: s = "anagram", t = "nagaram"
輸出: true

示例 2:

輸入: s = "rat", t = "car"
輸出: false

說明:

你可以假設字串只包含小寫字母。

進階:

如果輸入字串包含 unicode 字元怎麼辦?你能否調整你的解法來應對這種情況?

解法1:排序

/**
 * 思路:
 * 簡單過濾:看兩個字串長度是否一致
 * 轉換成字元陣列
 * 排序
 * 比較陣列
 */
    public boolean isAnagram(String s, String t) {
        if (s.length()!=t.length())return false;
        char[] s1 = s.toCharArray();
        char[] t1 = t.toCharArray();

        Arrays.sort
(s1); Arrays.sort(t1); return Arrays.equals(s1,t1); }

時間複雜度:Onlogn

空間複雜度:On
在這裡插入圖片描述

解法2:陣列

/**
 * 思路:
 * 簡單過濾:看兩個字串長度是否一致
 * 陣列長度26,代表26個字母
 * 遍歷s和t,s中的字母在陣列上++,t中的字母--
 * 最後遍歷陣列,如果有不是0的就不為有效字母異位詞
 */
     public boolean isAnagram(String s, String t) {

        if (s.length()!=t.length()
)return false; int[] arr=new int[26]; for (char c:s.toCharArray()){ arr[c-'a']++; } for (char c:t.toCharArray()){ arr[c-'a']--; } for (int i:arr)if (i!=0)return false; return true; }

時間複雜度:On

空間複雜度:O1
在這裡插入圖片描述

解法3:HashMap

/**
 * 思路:
 * 簡單過濾:看兩個字串長度是否一致
 * map中存放26個字母,以及出現的次數
 * s中出現++,t中出現--
 * 最後看map中的每個key的value是否為0
 */
     public boolean isAnagram(String s, String t) {
        if (s.length()!=t.length())return false;

        HashMap<Character, Integer> map = new HashMap<>();

        for (char c='a';c<='z';c++)map.put(c,0);

        for (int i=0;i<s.length();i++){
            map.put(s.charAt(i),map.get(s.charAt(i))+1);
            map.put(t.charAt(i),map.get(t.charAt(i))-1);
        }

        for (int i:map.values())if (i!=0)return false;

        return true;
    }

時間複雜度:On

空間複雜度:On
在這裡插入圖片描述

解法4:HashMap(暴力)

/**
 * 思路:
 * 將字串轉換為字元陣列
 * 儲存每個字元的次數在map中
 * 對比map中的數是否相同
 */
     public boolean isAnagram(String s, String t) {
        HashMap<Character, Integer> s_map = new HashMap<>();
        HashMap<Character, Integer> t_map = new HashMap<>();

        char[] s_chars = s.toCharArray();
        char[] t_chars = t.toCharArray();

        for (char c:s_chars){
            if (s_map.containsKey(c)) {
                s_map.put(c, s_map.get(c) + 1);
            }else {
                s_map.put(c, 1);
            }
        }

        for (char c:t_chars){
            if (t_map.containsKey(c)) {
                t_map.put(c, t_map.get(c) + 1);
            }else {
                t_map.put(c, 1);
            }
        }

        if (s_map.size()!=t_map.size())return false;

        for (Character c:s_map.keySet()){
            if (!t_map.containsKey(c)||!s_map.get(c).equals(t_map.get(c)))return false;
        }
        return true;
    }

時間複雜度:On

空間複雜度:On
在這裡插入圖片描述