一、242. 有效的字母异位词
思路:
使用哈希表,只需要使用数组来实现哈希表,因为数组自带索引的属性,一共有26 个字母,按照顺序,可以看成下标为0的地址,代表的字母a,这样子键值对就完成了,就形成了一个哈希表了。
其次就是看,我们还需要还需要统计字母出现的次数,可以先用哈希表过一遍其中一个字符串,遍历一遍,统计一下各个字母出现的次数。再用这个哈希表去过一遍另一个字符串,与一开始不同,这次遇到一个字母,就减一,与第一次反着来。
最后在利用for循环来检查这个哈希表,如果某一个字母出现的次数不是0,那就说明不匹配呢。
代码:
class Solution {
public boolean isAnagram(String s, String t) {
int [] nums = new int[26];
for(int i =0;i<s.length();i++ ){
nums[s.charAt(i)-'a'] = nums[s.charAt(i)-'a']+1;
}
for(int i =0;i<t.length();i++ ){
nums[t.charAt(i)-'a'] = nums[t.charAt(i)-'a']-1;
}
for( int count:nums){
if(count!=0){
return false;
}
}
return true;
}
}
二、349. 两个数组的交集
思路:
可以先预处理一个数组,将这个数组放入哈希表中,再遍历第二个数组,并判断每次遍历到的数在哈希表里面是否存在,如果存在,就把该数放入结果数组中。
代码:
import java.util.HashSet;
import java.util.Set;
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
List<Integer> ans = new ArrayList();
boolean [] a=new boolean[1000];//给定的范围就是小于1000
for(int i : nums){
a[i] = true;
}
for(int i :nums2){
if(a[i]){
a[i] = false;
ans.add(i);
}
}
int [] temp = new int[ans.size()];
for(int i =0;i<ans.size();i++){
tmp[i] = ans.get(i);
}
return tmp;
三、1. 两数之和
代码:
class Solution {
public int[] twoSum(int[] nums, int target) {
int [] res = new int[2];//开辟空间为2的数组用来保存数组
if(nums == null||nums.length==0){
return res;
}
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0;i<nums.length;i++){
int s = target-nums[i];
if(map.containsKey(s)){
res[0]=i;
res[1]=map.get(s);
break;
}
map.put(nums[i],i);
}
return res;
}
}