(二刷)代码随想录第6天|242.有效的字母异位词、349.两个数组的交集

242.有效的字母异位词 

242. 有效的字母异位词 - 力扣(LeetCode)

代码随想录 (programmercarl.com)

学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词_哔哩哔哩_bilibili

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

示例 1: 输入: s = "anagram", t = "nagaram" 输出: true

示例 2: 输入: s = "rat", t = "car" 输出: false

说明: 你可以假设字符串只包含小写字母。

这道题比较巧妙的地方在于在遍历字符串S的时候,将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以了。

综合代码:

class Solution{
    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;
    }

}

349. 两个数组的交集 

349. 两个数组的交集 - 力扣(LeetCode)

代码随想录 (programmercarl.com)

学透哈希表,set使用有技巧!Leetcode:349. 两个数组的交集_哔哩哔哩_bilibili

题意:给定两个数组,编写一个函数来计算它们的交集。

349. 两个数组的交集

说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。

在 C++ 中,`std::set` 是一个使用红黑树实现的有序集合,它不允许重复元素。`std::multiset` 也是一个使用红黑树实现的有序集合,但它允许存储重复元素。`std::unordered_set` 是一个使用哈希表实现的无序集合,它不允许重复元素。

在 Java 中,对应的数据结构分别是:

1. `java.util.TreeSet`:实现了有序集合的数据结构,底层基于红黑树实现,它不允许重复元素。与 `std::set` 相似,它保持元素的自然排序(如果元素类型实现了 `Comparable` 接口)或使用提供的比较器进行排序。

2. `java.util.TreeMap`:如果需要允许重复元素,可以使用 `TreeMap`。它是有序映射,允许键重复。`TreeMap` 也是基于红黑树实现的。

3. `java.util.HashSet`:实现了无序集合的数据结构,底层基于哈希表实现。与 `std::unordered_set` 相似,它不允许重复元素。

4. `java.util.HashMap`:如果需要允许键重复,可以使用 `HashMap`。它是无序映射,允许键重复。`HashMap` 也是基于哈希表实现的。

需要注意的是,Java 中的集合框架与 C++ 中的 STL 有些许差异,但提供了类似的功能。

这个题可以用数组,也可以用set,以下解法是用的HashSet:

class Solution{
    public int[] intersection(int[] nums1, int[] nums2){

        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        for(int i : nums1){
            set1.add(i);
        }
        for(int i : nums2){
            if(set1.contains(i)){
                set2.add(i);
            }
        }
        int [] arr = new int[set2.size()];
        int j = 0;
        for(int i : set2){
            arr[j++] = i;
        }
        return arr;
    }

}

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值