算法题——哈希表
242.有效的字母异位词
class Solution {public boolean isAnagram(String s, String t) {int[] mark = new int[26];for(int i=0;i<s.length();i++){mark[s.charAt(i)-'a']++;}for(int i=0;i<t.length();i++){mark[t.charAt(i)-'a']--;}for(int i : mark){if(i!=0) return false;}return true;}
}
首先new一个标记数组mark,遍历字符串s,在mark中记录每个字母出现的次数;再遍历字符串t,每遍历一个字母,就在mark中减去一次标记,若最后mark数组的内容全部为0,则说明两个单词为字母异位词,注意这里标记数组的大小只有26,所以手动建立一个哈希表,而不需要使用Java的map或set集合
349.两个数组的交集
class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer> resSet = new HashSet<>();Set<Integer> set = new HashSet<>();for(int i : nums1){set.add(i);}for(int i : nums2){if(set.contains(i)){resSet.add(i);}}int[] arr = new int[resSet.size()];int j=0;for(int i:resSet){arr[j++]=i;}return arr;}
}
这里要求结果中的每个元素一定是唯一的,因此考虑使用Set集合,Collection集合的用法见文章
7.15 Java SE(集合框架 P136-P142)-CSDN博客
首先定义集合set存储nums1中的数据(已经去重),再遍历nums2中的数据,判断set中是否存在遍历的元素,若存在则他是交集元素,将其存入集合resSet(因为这个过程也有可能出现重复元素,所以要存入Set集合而非数组),最后遍历resSet将元素存入一个整型数组中并返回(因为返回值要求是整型数组,而resSet使用toArray方法得到的是Object数组,处理比较复杂)