【每日一题-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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章