leetcode242.有效的字母異位詞

題目鏈接

思路一:sort

對(duì)于本題,最簡單暴力的方法就是將兩個(gè)字符串排序之后依次進(jìn)行比對(duì),代碼如下:

class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()){
            return false;
        }
        char[] chs1 = s.toCharArray();
        char[] chs2 = t.toCharArray();

        Arrays.sort(chs1);
        Arrays.sort(chs2);

        for(int i = 0;i < chs1.length;i++){
            if(chs1[i] != chs2[i]){
                return false;
            }
        }
        return true;
    }
}

排序的時(shí)間復(fù)雜度為O(nlogn),所以本題的時(shí)間復(fù)雜度即為O(nlogn),因?yàn)轭~外開辟了數(shù)組空間,所以額外空間復(fù)雜度為O(n)。
代碼運(yùn)行結(jié)果:


思路二:Hash

利用哈希思想進(jìn)行求解,代碼如下:

class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length() != t.length()){
            return false;
        }

        int[] map = new int[26];

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

        for(int i = 0;i < map.length;i++){
            if(map[i] != 0){
                return false;
            }
        }
        return true;
    }
}

使用哈希表的思想,使用長度為26的數(shù)組模擬HashMap,key表示26個(gè)小寫字母,value則表示每個(gè)字母出現(xiàn)的次數(shù),第一次遍歷將字符串s對(duì)應(yīng)的每個(gè)字符的個(gè)數(shù)做加法,將字符串t對(duì)應(yīng)的每個(gè)字符做減法,然后遍歷一次map,判斷每個(gè)key對(duì)應(yīng)的value是否為0即可,時(shí)間復(fù)雜度為O(n),額外空間復(fù)雜度為O(1),因?yàn)闊o論字符串有多長,我們每次只需要開辟26個(gè)長度的數(shù)組空間即可,這個(gè)值是固定的。
執(zhí)行結(jié)果如下:


也不知道為什么耗費(fèi)的時(shí)間更多了~(逃

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容