242题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
思路
1.hashmap
我们可以用两个hashmap,分别存储两个字符串对应的字母和出现频次,然后比较两个map是否一样,用equals,一样说明是异位的。
```java
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length()!=t.length()) {//字符串长度不相等,直接返回
return false;
}
HashMap<Character, Integer> map1=new HashMap<Character,Integer>();
for(int i=0;i<s.length();i++) {
char c=s.charAt(i);
if(!map1.containsKey(c)){//判断该字符是否已经在map中存在,不存在则加入map
map1.put(c,1);
}
else{
map1.put(c,map1.get(c)+1);//存在则value加一
}
}
HashMap<Character, Integer> map2=new HashMap<Character,Integer>();
for(int i=0;i<t.length();i++) {
char c=t.charAt(i);
if(!map2.containsKey(c)){
map2.put(c,1);
}
else{
map2.put(c,map2.get(c)+1);
}
}
return map1.equals(map2);//最后比对两个map,看是否相等。
}
}
49题目描述
思路
1.首先声明一个hashmap,然后 key为排序后的词,因为异位词排序后都一样,所以可以借此分成不同组。
2.value设置为string类型的list,每遇到自己key下的字符串时,加入list中
3.最后遍历map中所有的values,然后加入到新建的链表中。
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
List<List<String>> res = new LinkedList<>();
Map<String, List<String>> map = new HashMap<>();
//O(n), n = the length of strs
for(int i = 0; i < strs.length; i ++){
String s = strs[i];
char[] c = s.toCharArray();//将字符串拆分成字符然后存入char类型数组
//O(k*log^k), k = the longest string in strs
Arrays.sort(c);//从小到大排序
s = new String(c);//转换成字符串
if(map.containsKey(s)){//判断是否包含该字符串
List<String> list = map.get(s);
list.add(strs[i]);
map.put(s, list);
}
else {//不包含则新建链表,将key对应的数组值加入链表中,再将list加入map中
List<String> list = new LinkedList<>();
list.add(strs[i]);
map.put(s, list);
}
}
//O(m), m = the number of anagram group
for(List list : map.values())
res.add(list);//遍历map中的values,存入新链表
return res;
}
}
219题目描述
思路
1.创建一个hashmap,然后key为元素值,value为对应的数组下标
2.然后遍历数组,判断map中是否包含重复元素,也就是key是否已经存在,且重复元素的下标与前一个下标之差是否不大于k,若是,则返回true
3.否则,就是往里更新该元素对应的下标.
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
HashMap <Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(nums[i])&&(i-map.get(nums[i]))<=k){
return true;
}
map.put(nums[i],i);
}
return false;
}
}