less than 1 minute read

T242 有效的字母异位词

1、先做粗检测快速砍时间(长度不等直接返回false)

2、没必要分开走两遍循环,一轮中每次做两件事即可,一加一减最后看是不是零

3、没必要开两张map,同理,一张上同增同减

4、对于仅含小写字母的,下面方法简洁快速。额外注意,string.charAt(i)方法常见,本质是字符和数字的等价性


        int[] count = new int[26];

        for (int i = 0; i < s.length(); i++) {
            count[s.charAt(i) - 'a']++;
            count[t.charAt(i) - 'a']--;
        }


T438 找到字符串中所有字母异位词

1、滑动窗口的核心是中间一段保持不变形

2、继续利用了T242的关键(一加一减、同一Map)

3、确定精确边界值的好办法是先确定好方向(什么变量加减,乘以多少),常数值一时想不清楚就画个样例图协助

T49 字母异位词分组

对于字符串来说,想要获得和字母异位词等价的key,可以直接对char进行排序,把排序后的string拿来做key,而不需要什么新的算法

T349 两个数组的交集

1、hashset自带去重特性,可以直接调用。记得了解官方实现原理及复杂度,函数名

2、也可以用数组序号做,但不适用于更大范围的测试数据

摘录《代码随想录》笔记: (应该是指相等确定的数据量下)直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算。该耗时在数据量大的情况下差距明显。

T350 两个数组的交集2

1、重复利用已有资源,减少空间复杂度(count[n]后面除了利用非零做交集、得知次数外,还可以直接利用遍历nums2时每个n出现的次数来自减,利用谁先不再出现/为零作结束符,统计较小值)

2、数组长短不同时,把短数组放进哈希表,再去扫描长数组


持续更新中