1 两数之和
思路:
获取target与当前数值的差,在数组中的什么位置。用一个hash表来存储数组中的数值与其下表即可。
核心代码方法:
hash表的创建 :Map<Integer, Integer> hb = new HashMap<Integer, Integer>();
hash表中是否包含元素:hb.containsKey(key);
hash表添加:hb.put();
一个数组初始化方法:new int[]{hb.get(target-nums[i]), i}
2 将包含相同单词的字母的不同组合放在一个列表中
思路:
将字符串里面的字符进行排序,如果其组合相同,那么其排序后的字符串一定相同(找到所有相同字母,组合不同的单词)
因此可以将这个字符串作为hash表的key,对应的单词作为value进行储存(如何将具有相同单词,组合不同的单词放在一起,那么需要一个hash表)
核心代码及对应方法:
将字符串转化为字符数组,char[] chars = str.toCharArray();
对数组字符进行排序:Arrays.sort(chars);
最后将排序后的数组转化为字符串:String str_s = String.valueOf(chars);
列表申明:ArrayList<String> stris = new ArrayList<>();
列表添加:stris.add(str);
嵌套列表的一种初始化方式:List<List<String>> res = new ArrayList<>(hashMap.values());
3 找出数组中的最长连续字串(其数组下表不要求连续)
思路:
找出每个对应数字的连续长度,剪枝(如果这个数字不是开头直接跳过,只遍历以这个数开头的最大连续字符串即可),遍历是否存在(使用hashset进行存储)。
核心代码:
hashset声明:Set<Integer> hs = new HashSet<Integer>();
hashset添加:hs.add(nums[i]);
hashset是否包含某元素:hs.contains(nums[i]-1);