8月算法训练------第七天(哈希表)解题报告
题目类型:哈希表
题目难度:简单
第一题、2068. 检查两个字符串是否几乎相等
- 题目链接:2068. 检查两个字符串是否几乎相等
- 思路分析:
字符串中的每个字符都是在'a'~'z'
所以定义一个长度为26的数组,表示26个字符,遍历word1
,在对应位置的num[i]++
;
然后,遍历word2
,在对应位置num[i]--
;
遍历一遍num数组,如果num[i]
的绝对值大于3,则返回false,若都没有大于3的,就返回true。 - 代码:
class Solution {
public boolean checkAlmostEquivalent(String word1, String word2) {
int[] num = new int[26];
for(int i = 0; i < word1.length(); i++){
char c = word1.charAt(i);
num[c-'a']++;
}
for(int i = 0; i < word2.length(); i++){
char c = word2.charAt(i);
num[c-'a']--;
}
for(int i = 0; i < num.length; i++){
if(Math.abs(num[i]) > 3) return false;
}
return true;
}
}
第二题、2283. 判断一个数的数字计数是否等于数位的值
- 题目链接:2283. 判断一个数的数字计数是否等于数位的值
- 思路分析:
这一题和上一题思路其实差不多,字符串中的字符都是在'0'~'9'
所以申请一个长度为10的数组,用于存放数字出现的次数,第一次遍历字符串,用来找出字符串中每个数字出现的次数;
第二次遍历数组就用来检查是否符合要求。 - 代码:
class Solution {
public boolean digitCount(String num) {
int[] arr = new int[10];
for(int i = 0; i < num.length(); i++){
char c = num.charAt(i);
String s = Character.toString(c);
arr[Integer.parseInt(s)]++;
}
for(int i = 0; i < num.length(); i++){
char c = num.charAt(i);
String s = Character.toString(c);
int a = Integer.parseInt(s);
if(a != arr[i]){
return false;
}
}
return true;
}
}
第三题、剑指 Offer 40. 最小的k个数
- 题目链接:剑指 Offer 40. 最小的k个数
- 思路分析:
将arr进行排序,将最小的k个数以数组的形式输出。 - 代码:
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
Arrays.sort(arr);
int[] num = new int[k];
for(int i = 0; i < k; i++){
num[i] = arr[i];
}
return num;
}
}
第四题、剑指 Offer 41. 数据流中的中位数
-
思路分析:
-
代码:
芜湖 起飞