首页 > 其他分享 >代码随想录第六天| 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

代码随想录第六天| 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

时间:2022-09-26 13:12:18浏览次数:85  
标签:map 202 return int sum 随想录 ++ 数组 两数

什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。

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

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

ψ(`∇´)ψ 我的思路

  • 这是我拿到题一开始的思路,两个字符串装到俩个map中,再进行比较
package hash;

import java.util.HashMap;
import java.util.Set;

class IsAnagram {
    public static boolean isAnagram(String s, String t) {
        char c;
        HashMap<Character, Integer> smap = new HashMap<>();
        int len = s.length();//字符串的长度
        for (int i = 0; i < len; i++) {
            c = s.charAt(i);//挨个取出s字符串中的每一个字符
            if(smap.containsKey(c)){//如果key中已有c
                smap.put(c,smap.get(c)+1);//把c中原来的值+1再赋给c
            } else {
                smap.put(c,1);//如果key中没有c,添加c并赋值1
            }
        }

        HashMap<Character, Integer> tmap = new HashMap<>();
        for (int i = 0; i < len; i++) {
            c = t.charAt(i);//挨个取出t字符串中的每一个字符
            if(tmap.containsKey(c)){//如果key中已有c
                tmap.put(c,tmap.get(c)+1);//把c中原来的值+1再赋给c
            } else {
                tmap.put(c,1);//如果key中没有c,添加c并赋值1
            }
        }
        if(smap==tmap){
            return true;
        }else {
            return false;
        }
    }

    public static void main(String[] args) {
        String s = "anagram";
        String t = "nagaram";
        System.out.println(isAnagram(s, t));
    }
}
  • 后来debug发现==判断的是两个map的地址

  • 改进后的思路:只用一个map,第一个字符串存,第二个字符串取

public static boolean isAnagram(String s, String t) {
        if(s.length()!=t.length()){
            return false;//长度都不等,你还比个什么呢,返回吧
        }
        char c;
        HashMap<Character, Integer> map = new HashMap<>();
        int len = s.length();//字符串的长度
        for (int i = 0; i < len; i++) {
            c = s.charAt(i);//挨个取出s字符串中的每一个字符
            if(map.containsKey(c)){//如果key中已有c
                map.put(c,map.get(c)+1);//把c中原来的值+1再赋给c
            } else {
                map.put(c,1);//如果key中没有c,添加c并赋值1
            }
        }

        for (int i = 0; i < len; i++) {
            c = t.charAt(i);//挨个取出t字符串中的每一个字符
            if(map.containsKey(c)){//如果key中已有c
                map.put(c,map.get(c)-1);//把c中原来的值-1再赋给c
                if (map.get(c)==0){
                    map.remove(c);//当c的值减到0的时候移除c
                }
            } else {
                return false;//如果key中没有c,直接返回false
            }
        }
        if(map.isEmpty()){
            return true;
        }else {
            return false;
        }
    }
  • 通过之后我在写博客的时候发现只要将第一种方法的==换成equal就也可以通过

    标签:map,202,return,int,sum,随想录,++,数组,两数
    From: https://www.cnblogs.com/xiannveryao/p/16730515.html

相关文章