classSolution{publicbooleancanConstruct(StringransomNote,Stringmagazine){Map<Character,Integer> result =newHashMap<Character,Integer>();for(int i=0;i<ransomNote.length();i++){result.put(ransomNote.charAt(i),result.getOrDefault(ransomNote.charAt(i),0)+1);}for(int j=0;j<magazine.length();j++){if(result.containsKey(magazine.charAt(j))){result.put(magazine.charAt(j),result.getOrDefault(magazine.charAt(j),0)-1);}if(result.getOrDefault(magazine.charAt(j),0)==0){result.remove(magazine.charAt(j));}}if(result.size()==0){returntrue;}returnfalse;}}
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<Object, List<String>> map = new HashMap<Object, List<String>>();
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());
}
}
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map=new HashMap();
for(int i=0; i< nums.length; i++){
if(map.containsKey(target -nums[i])){
return new int[]{map.get(target -nums[i]),i};
}
map.put(nums[i],i);
}
return new int[0];
}
}
class Solution {
private int getNext(int n) {
int totalSum = 0;
while (n > 0) {
int d = n % 10;
n = n / 10;
totalSum += d * d;
}
return totalSum;
}
public boolean isHappy(int n) {
Set<Integer> seen = new HashSet<>();
while (n != 1 && !seen.contains(n)) {
seen.add(n);
n = getNext(n);
}
return n == 1;
}
}
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<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;
}
}
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer> num_set = new HashSet<Integer>();
for (int num : nums) {
num_set.add(num);
}
int longestStreak = 0;
for (int num : num_set) {
if (!num_set.contains(num - 1)) {
int currentNum = num;
int currentStreak = 1;
//因为不要求原序列连续,所以只需要判断num_set中是否有后续的number即可
while (num_set.contains(currentNum + 1)) {
currentNum += 1;
currentStreak += 1;
}
longestStreak = Math.max(longestStreak, currentStreak);
}
}
return longestStreak;
}
}