字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1 。
分析
- 第一个、重复:第一次遍历用哈希表储存频数getOrDefault,第二次遍历哈希表得到的第一个=1的为所需索引
变体:第一次遍历,添加时若包含(containsKey())则修改value,即标记 重复;第二次遍历记录非重复key最小值,返回该值- 找第一个>队列 先进先出
哈希表判断是否重复,不重复则入队列(创建内部类记录字符和索引)入哈希表,重复若在队首则poll
赎金信
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
分析
- 记录字符及其个数, 出现则-1,判断<0则不符
- 哈希表 getOrDefault,第二次循环里判断<0即可,不用第三个循环
- 数组 字母顺序即数组索引,重复个数为数值(推荐)
有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
分析
记录出现字母及个数,必须完全相同(先判断长度是否相等)
- 哈希表 两个循环 O(n)/O(S),S为字符集大小
- 数组 两个循环 O(n)/O(S)
- 字符串数组比较 排序 O(n logn)/O(logn)
Arrays