day5|242.有效的字母异位词、349. 两个数组的交集

242.有效的字母异位词

题目链接:https://leetcode.cn/problems/valid-anagram/
文章链接:https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html
视频链接:https://www.bilibili.com/video/BV1YG411p7BA/

package com.fifthday.hashtable;

import com.threeday.listnode.ListNode;


/**
 * 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
 *
 * 示例 1: 输入: s = "anagram", t = "nagaram" 输出: true
 *
 * 示例 2: 输入: s = "rat", t = "car" 输出: false
 *
 * 说明: 你可以假设字符串只包含小写字母。
 */
public class IsAnagram {

    public static void main(String[] args) {
        String s = "anagram";
        String t = "nagaram";

        System.out.println(isAnagram(s,t));

    }

    public static boolean isAnagram(String s,String t){
        int[] records = new int[26];  //对应26个字母的空间

        for (int i = 0; i < s.length(); i++) {
            records[s.charAt(i)-'a']++;   //s字符串:对应的数组值+1
        }

        for (int i = 0; i < t.length(); i++) {
            records[t.charAt(i)-'a']--;     //t字符串:对应的数组值-1
        }
        for (int i = 0; i < records.length; i++) {
            if (records[i] !=0 ){       //遍历数组:如果出现不等于0的情况就是两个字符串对应的字符个数是不同的
                return false;
            }
        }
        return true;
    }
}

349. 两个数组的交集

题目链接:https://leetcode.cn/problems/intersection-of-two-arrays/
文章链接:https://programmercarl.com/0349.%E4%B8%A4%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E4%BA%A4%E9%9B%86.html
视频链接:https://www.bilibili.com/video/BV1ba411S7wu/

/**
 * 给定两个数组,编写一个函数来计算它们的交集。
 *
 * 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序
 *
 */
public class InterSection {

    public static void main(String[] args) {
        int[] nums1 ={1,2,2,1};
        int[] nums2 ={2,2};

        int[] result = interSection(nums1, nums2);
        for (int e : result){
            System.out.print(e+" ");
        }

    }

    public static int[] interSection(int[] nums1,int[] nums2){

        //验证数组的合法性
        if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
            return new int[0];
        }

        //不允许存储重复的元素
        Set<Integer> set1 = new HashSet<>(); //存储数组
        Set<Integer> resSet = new HashSet<>(); //  存储交集的集合

        //先把一个数组转成set集合
        for (int i = 0; i < nums1.length; i++) {
            set1.add(nums1[i]);
        }

        //使用contains()方法来判断是否存在交集的值
        for (int i = 0; i < nums2.length; i++) {
            if (set1.contains(nums2[i])){
                //如果存在添加到set集合,防止有重复元素出现
                resSet.add(nums2[i]);
            }
        }

        //最后将set集合转成数组
        return resSet.stream().mapToInt(e->e).toArray();


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值