模板下载网站织梦模板最新军事动态
题号383
给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
class Solution {public boolean canConstruct(String r, String m) {HashMap<Character, Integer> dic=new HashMap<>();//创建哈希表int r_size=r.length();int m_size=m.length();for(int i=0;i<m_size;i++){dic.put(m.charAt(i),dic.getOrDefault(m.charAt(i),0)+1);}//先对m操作for(int i=0;i<r_size;i++){dic.put(r.charAt(i),dic.getOrDefault(r.charAt(i),0)-1);}//再将r中的元素减去for(int val:dic.values()){if(val<0)//若有负数出现则说明出现了其他字符return false;}return true;}
}
题号49
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
我的写法
大致思路:创建一个哈希表,key是计数数组生成的字符串,values是strs[i],则可以将计数数组相同的字符串放在同一列表下,但是这种方法时间复杂度高
import java.util.*;class Solution {public List<List<String>> groupAnagrams(String[] strs) {int n = strs.length;HashMap<String, List<String>> map = new HashMap<>();for (int i = 0; i < n; i++) {// 不能直接用数组作为键,使用计数数组生成的字符串作为键String key = Arrays.toString(count(strs[i]));List <String> list=map.getOrDefault(key,new ArrayList<String>());//如果存在key 则返回与该键关联的 List<String>//如果不存在,则返回一个新的 ArrayList<String> 实例list.add(strs[i]);map.put(key,list);}// 返回包含所有列表的列表return new ArrayList<List<String>>(map.values());}public int[] count(String s) {int[] arr = new int[26];int size = s.length();for (int i = 0; i < size; i++) {arr[s.charAt(i) - 'a']++;}return arr;}
}