【每日一題-leetcode】242.有效的字母異位詞

242.有效的字母異位詞

  1. 有效的字母異位詞

難度簡單173收藏分享切換爲英文關注反饋

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

示例 1:

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

示例 2:

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

1.依次遍歷比較

思路:異位次的含義是 一個字符串中字母的順序改變,但是個數不變 就是異位詞。

比較長度 如果長度不相等 返回false 然後將兩個字符串進行排序,時間複雜度爲O(logN)

然後進行依次比較 如果不相等直接返回true 不好的一點是 排序使時間複雜度提高了。

time 😮(NlogN)

space:O(1)

//time O(NlogN)  space O(n)
    public boolean isAnagram(String s, String t) {
        //排序後比較
        if(s.length() != t.length()){
            return false;
        }

        char [] chs = s.toCharArray();
        char [] cht = t.toCharArray();

        Arrays.sort(chs);
        Arrays.sort(cht);

        return Arrays.equals(chs,cht);
    }

2.哈希表

思路:如果長度不同 返回false 定義一個數組 26 s.charAt(i)-‘a’ 存儲進數組 對應的下標 t.charAt(i)-‘a’ 不存儲對應的下標。前者++ 後者-- 當最後數組爲0是異位詞,否則不是異位詞。

time:O(n)

space:O(1)

public boolean isAnagram(String s, String t) {
        //哈希表
        if(s.length() != t.length()){
            return false;
        }

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

        for(int i=0;i<alpha.length;i++){
            if(alpha[i]!=0){
                return false;
            }
        }
        return true;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章