LeetCode242.有效的字母异位词

242.有效的字母异位词

LeetCode242.有效的字母异位词_第1张图片

数组其实就是一个简单的哈希表,这道题目中字符串只有小写字母,那么就可以定义一个数组,来记录字符串s里字符出现的次数

定义一个数组叫做record,大小为26就OK,初始化为0,因为字符a到字符z的ASCII也是26个连续的数值

为了方便举例,判断一下字符串s=“aee”,t=”eae“

操作动画如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pIKFFxMI-1689825789659)(D:\Typora笔记\images\242.有效的字母异位词.gif)]

定义一个record数组记录字符串s中字符出现的次数

我们需要把字符映射到数组,也就是哈希表的索引下标上,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的,字符z映射为下标25

在遍历字符串s的时候,只需要将s[i]-'a’所在的元素+1操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以,这样就将字符串s中字符出现的次数统计出来了

如何检查字符串t中出现了这些字符呢,我们在遍历字符串t的时候,对t中出现的字符映射哈希表索引上的数值再做-1操作

最后我们通过检查,record数组如果有的元素不为0,说明字符串s和t一定是谁多了字符,返回fasle

如果record数组所有的元素都为0,那就说明字符串s和t是字母异位词,返回true

    public boolean isAnagram(String s, String t) {
        int[] record = new int[26];
        for(int i=0;i<s.length();i++){
            record[s.charAt(i)-'a']++;
        }
        for(int i=0;i<t.length();i++){
            record[t.charAt(i)-'a']--;
        }
        for(int count:record){
            if(count!=0){
                return false;
            }  
        }
        return true;
    }

你可能感兴趣的:(算法实战,数据结构,java,力扣,算法,哈希表,leetcode)