442. 数组中重复的数据
hash表 以遍历到的数作为下标,值为出现次数,每次判断出现次数是否为2,为2则加入到list中,并返回
class Solution {
public List<Integer> findDuplicates(int[] nums) {
int[] hash = new int[nums.length+1];
List<Integer> tmp = new ArrayList<Integer>();
int a=0;
for(int i=0;i<nums.length;++i){
++hash[nums[i]];
if(hash[nums[i]]==2){
tmp.add(nums[i]);
}
}
return tmp;
}
}
2283. 判断一个数的数字计数是否等于数位的值
hash表 ,hash表大小为10,0-9的10个数字先统计下num里每个数字出现的此时,然后再循环遍历,判断是否符合题目要求,符合则最后会返回true,也就是return false的语句不会执行
class Solution {
public boolean digitCount(String num) {
int[] hash = new int[10];
for(int i=0;i<num.length();++i){
char c = num.charAt(i);
Integer strToNum = Integer.parseInt(c+"");
++hash[strToNum];
}
for(int i=0;i<num.length();++i){
char c = num.charAt(i);
Integer strToNum = Integer.parseInt(c+"");
if(hash[i] !=strToNum){
return false;
}
}
return true;
}
}
2068. 检查两个字符串是否几乎相等
word1,word2都遍历一遍,在一个hash表记录数据,word1遇到字母++,word2遇到字母–,最后,如果数量在-3 <= num <= 3 则说明字符串相似,返回true 否则不相似 反正false
class Solution {
public boolean checkAlmostEquivalent(String word1, String word2) {
int[] hash = new int[26];
int i;
for(i=0;i<word1.length();++i){
++hash[word1.charAt(i)-'a'];
}
for(i=0;i<word2.length();++i){
--hash[word2.charAt(i)-'a'];
}
for(i=0;i<26;++i){
if(hash[i]<-3||hash[i]>3){
return false;
}
}
return true;
}
}
884. 两句话中的不常见单词
用一个hash 然后s1 s2 遍历,存入hashmap,value+1,如果最后hashmap有个key的值,也就是有个单词的数量为1,那么这个单词则为不常见单词
class Solution {
public String[] uncommonFromSentences(String s1, String s2) {
Map<String,Integer> map = new HashMap<String,Integer>();
int i;
String[] s1Arr = s1.split(" ");
String[] s2Arr = s2.split(" ");
List<String> retList = new ArrayList<String>();
for(i=0;i<s1Arr.length;++i){
map.put(s1Arr[i],map.getOrDefault(s1Arr[i],0)+1);
}
for(i=0;i<s2Arr.length;++i){
map.put(s2Arr[i],map.getOrDefault(s2Arr[i],0)+1);
}
System.out.println(map);
for(String key:map.keySet()){
Integer total = map.getOrDefault(key,0);
if(total == 1){
retList.add(key);
}
}
return retList.stream().toArray(String[]::new);
}
}