时隔一个月的第一次写代码,闹麻了

统计出现过一次的公共字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int countWords(String[] words1, String[] words2) {
Map<String,Integer> map1 = new HashMap<>(); //依据hash中的value来判断是否重复
Map<String,Integer> map2 = new HashMap<>();
for(String w : words1){
map1.put(w,map1.getOrDefault(w,0)+1); //如果已经存在,则value+1
}
for(String w : words2){
map2.put(w,map2.getOrDefault(w,0)+1);
}
int count = 0;
for(String w: map1.keySet()){ //使用ke'ySet来进行遍历
//如果两个map中都存在且value为1,则说明只出现过一次
if(map1.get(w)==1 && map2.getOrDefault(w,0)==1){
count++;
}
}
return count;
}
}

宝石与石头

给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.HashMap;
import java.util.Map;

class Solution {
public int numJewelsInStones(String jewels, String stones) {

Map<Character, Integer> map1 = new HashMap<>();
Map<Character, Integer> map2 = new HashMap<>();

for (char c : jewels.toCharArray()) {
map1.put(c, map1.getOrDefault(c, 0) + 1);
}
for (char c : stones.toCharArray()) {
map2.put(c, map2.getOrDefault(c, 0) + 1);
}

int count = 0;
for (char c : map1.keySet()) {
if (map2.containsKey(c)) {
count += map2.get(c);
}
}

return count;
}
}

字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。比如abc和bca是字母异位词,它们可以出现在同一个答案中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> map = new HashMap<String,List<String>>();
//将每一个字符串进行排序,然后作为key,将排序后的字符串作为value
//将相同的字符串放到同一个list中
for(String str : strs){
char[] ca = str.toCharArray();
Arrays.sort(ca);
String key = new String(ca);
//这里的key值每一个是排列好的标准
List<String> list = map.getOrDefault(key,new ArrayList<String>());
list.add(str);
map.put(key,list);
}
return new ArrayList<List<String>>(map.values());
}
}

哈希表的常用操作

在Java中,HashMap 是常用的哈希表实现,提供了一系列的操作来对哈希表进行管理。以下是一些常见的哈希表操作:

插入元素:

put(K key, V value): 将指定的键值对插入哈希表。
putAll(Map<? extends K, ? extends V> m): 将指定 Map 中的所有键值对插入哈希表。

获取元素:

get(Object key): 返回指定键对应的值。
getOrDefault(Object key, V defaultValue): 返回指定键对应的值,如果键不存在,则返回默认值。

删除元素:

remove(Object key): 删除指定键对应的键值对。
clear(): 清空哈希表中的所有键值对。

判断包含关系:

containsKey(Object key): 判断哈希表是否包含指定的键。
containsValue(Object value): 判断哈希表是否包含指定的值。

遍历操作:

keySet(): 返回包含所有键的 Set 集合。
values(): 返回包含所有值的 Collection 集合。
entrySet(): 返回包含所有键值对的 Set 集合。

其他操作:

size(): 返回哈希表中键值对的数量。
isEmpty(): 判断哈希表是否为空。
需要注意的是,哈希表的性能在很大程度上依赖于哈希函数的设计和负载因子的设置。在使用哈希表时,可以根据实际需求选择不同的操作来满足特定的场景。