力扣 有效的字母异位词

核心思想

如果把两个字符串按照ASII码排序的话,那么两个字符串完全相同。最后返回true即可。否则的话就返回false。

方法:哈希表 

解题步骤 

1.判断两个字符串的长度是否相等,如果两个字符串不想等,自然不是有效的字母异位词,按照题意直接返回false即可。

public boolean isAnagram(String s, String t) {
       int len1 = s.length();
       int len2 = t.length();
       if(len1 != len2) return false;
}

2.分别遍历字符串s 和 字符串t 把字符串s的所有元素都放到哈希表中,遍历字符串s时不论字符是否存在,都将其出现的次数+1.遍历字符串t时,不断的把哈希表中出现过的元素-1.这里的哈希表存储的是字符和数字对,用来统计字符出现的次数。

 HashMap<Character,Integer> map = new HashMap<>();
       for(int i = 0;i<len1;i++){
        map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0)+1);
       }
       for(int i = 0;i<len2;i++){
        map.put(t.charAt(i),map.getOrDefault(t.charAt(i),0)-1);
       }

3.遍历哈希表中元素出现的次数,如过最后得到的所有元素出现次数位0就证明这是一个有效的字母异位词。比如说第一个字符串cat 第二个字符串 tca 最终哈希表会把各个元素出现的次数减为0.证明上述两个字符串是有效的字母异位词。

完整代码

class Solution {
    public boolean isAnagram(String s, String t) {
       int len1 = s.length();
       int len2 = t.length();
       if(len1 != len2) return false;
       HashMap<Character,Integer> map = new HashMap<>();
       for(int i = 0;i<len1;i++){
        map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0)+1);
       }
       for(int i = 0;i<len2;i++){
        map.put(t.charAt(i),map.getOrDefault(t.charAt(i),0)-1);
       }
       for(int val: map.values()){
        if(val != 0){
            return false;
        }
       }
       return true;
    }
}

 

 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值