每日一题.242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

我的解法:首先定义一个长度为26的int数组flag,用于标记字符串中字母出现的次数。对于字符串s中的字母,flag在字母下标对应的元素位置+1;对于字符串t中的字母,flag在字母下标对应的元素位置-1。最后遍历flag,若所有元素都为0,说明t是s的字母异位词,反之则不是。

时间复杂度:O(n),空间复杂度:O(n)

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] flag = new int[26];
        char[] ss = s.toCharArray();
        for (char c : ss) {
            flag[c - 'a']++;
        }
        char[] tt = t.toCharArray();
        for (char c : tt) {
            flag[c - 'a']--;
        }
        for (int i = 0; i < 26; i++) {
            if (flag[i] != 0) {
                return false;
            }
        }
        return true;
    }
}

改进算法:首先判断s和t的长度是否相同,若不同则说明t不是s的字母异位词。然后同时遍历s和t,对于字符串s中的字母,flag在字母下标对应的元素位置+1;对于字符串t中的字母,flag在字母下标对应的元素位置-1。最后判断flag中是否所有元素都为0。

时间复杂度:O(n),空间复杂度:O(n)

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        int[] flag = new int[26];
        for (int i = 0; i < s.length(); i++) {
            flag[s.charAt(i) - 'a']++;
            flag[t.charAt(i) - 'a']--;
        }
        for (int i = 0; i < 26; i++) {
            if (flag[i] != 0) {
                return false;
            }
        }
        return true;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容