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
题意:给定两个数组,编写一个函数来计算它们的交集。
说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。
在 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;
}
}