class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> map=new HashMap<>();
for(String str:strs){
char[] array=str.toCharArray();
Arrays.sort(array);//进行排序之后与第一个进行比较即可
String key=new String(array);
List<String> list=map.getOrDefault(key,new ArrayList<String>());
list.add(str);
map.put(key,list);
}
return new ArrayList<List<String>>(map.values());
}
}
0.哈希表简介
1.两数之和
解法一:暴力解法
解法二:优化-哈希表
class Solution {
// public static int[] twoSum(int[] nums, int target) {
// int[] arr=new int[2];
// int i=0;
// for(i=0;i<nums.length;i++){
// //循环
// //1.记住第一个数字
// int tmp1=nums[i];
// int target1=i;
// for(int j=i+1;j<nums.length;j++){
// int tmp2=nums[j];
// int target2=j;
// if(tmp2+tmp1==target){
// arr[0]=target1;
// arr[1]=target2;
// return arr;
// }
// }
// }
// return null;
// }
public static int[] twoSum(int[] nums, int target) {
int len=nums.length;
Map<Integer,Integer> hashMap=new HashMap<>(len-1);
hashMap.put(nums[0],0);
for(int i=1;i<len;i++){
if(hashMap.containsKey(target-nums[i])){
return new int[]{hashMap.get(target-nums[i]),i};
}
hashMap.put(nums[i],i);
}
return null;
}
}
public static int[] twoSum(int[] nums, int target) { int len=nums.length; Map<Integer,Integer> hashMap=new HashMap<>(len-1); for(int i=0;i<len;i++){ int x=target-nums[i]; if(hashMap.containsKey(x)){ return new int[]{hashMap.get(target-nums[i]),i}; } hashMap.put(nums[i],i); } return null; }
2.判断是否为重排字符串
面试题 01.02. 判定是否互为字符重排 - 力扣(LeetCode)
class Solution {
public boolean CheckPermutation(String s1, String s2) {
if(s1.length()!=s2.length()){
return false;
}
int[] hash=new int[26];
for(int i=0;i<s1.length();i++){
hash[s1.charAt(i)-'a']++;
hash[s2.charAt(i)-'a']--;
}
for(int i=0;i<s1.length();i++){
if(hash[s1.charAt(i)-'a']!=0){
return false;
}
}
return true;
}
}
4.存在重复元素1
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> hashset=new HashSet<>();
for(int i=0;i<nums.length;i++){
if(hashset.contains(nums[i])){
return true;
}
hashset.add(nums[i]);
}
return false;
}
}
5.存在重复元素2
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer,Integer> hashmap=new HashMap<>();
for(int i=0;i<nums.length;i++){
if(hashmap.containsKey(nums[i])){
if(i-hashmap.get(nums[i])<=k){
return true;
}
}
hashmap.put(nums[i],i);
}
return false;
}
}
6.字母异位词分组
标签:key,map,String,int,算法,哈希,new,优化,public From: https://blog.csdn.net/m0_47017197/article/details/140067282class Solution { public List<List<String>> groupAnagrams(String[] strs) { Map<String,List<String>> map=new HashMap<>(); for(String str:strs){ char[] array=str.toCharArray(); Arrays.sort(array);//进行排序之后与第一个进行比较即可 String key=new String(array); List<String> list=map.getOrDefault(key,new ArrayList<String>()); list.add(str); map.put(key,list); } return new ArrayList<List<String>>(map.values()); } }