异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
示例 1:
输入: s = “cbaebabacd”, p = “abc”
输出: [0,6]
解释:
起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。
起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。
示例 2:
输入: s = “abab”, p = “ab”
输出: [0,1,2]
解释:
起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。
起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。
起始索引等于 2 的子串是 “ab”, 它是 “ab” 的异位词。
提示:
-
1 <= s.length, p.length <= 3 * 104
-
s
和p
仅包含小写字母
经验总结:
1:技巧方法方面
通过本题,在比较二十六个英文字母时候 开辟计数数组count是比较方便的,给出一个字符串统计其中的字符出现个数,其实是比较好操作的,因为数字 0 - 9 十个 ,大小写 各自26个,这些全部加起来,也还是常数级内进行操作。。。用到的时间和空间复杂度都为O(1)
但是有时候数字他不给出限制 大小,自己做数组,用下标存储,浪费太大了
本题考察的思想,关于哈希表方面的,其实无非就是 用数组做个哈希表,存放小写字母出现的个数,这些在考察字母异位词,赎金信问题中,打的一拳开,免得百拳来。
2:其次,关于滑动窗口,以前对滑动窗口的理解还是不够深,如本题为什么人家的方法能比我的快,用时10ms以内,而我的虽然用暴力安慰奖超过百分之五,用时两千毫秒,再用“滑动数组”依然是百分之十,用时一千毫秒呢?仔细分析,原因莫不是我的“滑动窗口” 是真假美猴王。
我没有掌握理解滑动窗口的思想。 仔细分析大佬的题解,每次滑动窗口 大佬的·题解是:
最核心的一点,大佬的思想是:
因为cntS这个计数数组本质上就是记录一定长度内子串的每个字符对应的小写字母出现的个数。
所以每次就通过左边的字母出现的次数 减一
右边窗口新增进来的字母的次数 加一 进行重复利用的操作 。一旦P字符串长度数十万,S字符串只用读取一次十万 统计出现个数,之后每次加一减一。
滑动窗口真可谓是YYDS了!
至此才算是初窥门径,略懂皮毛。算法思想博大精深!
而我的所谓“双指针”“滑动数组”,其实无非就是,位置的加一减一,变更位置后,还是对符合条件的数组重新读取,再次操作,存入cntS这个统计S字符串中 长度等于P字符串的子串中的各个字符出现的个数。实在是粗陋浅薄,不堪入目~~~
真&滑动窗口
找到字符串中所有字母异位词
提交记录
61 / 61 个通过测试用例
状态:通过
执行用时: 10 ms
内存消耗: 39.1 MB
邀请好友来挑战 找到字符串中所有字母异位词
语言: java
添加备注
class Solution
{
public List findAnagrams(String s, String p)
{
//首先变量命名不要给自己找麻烦 这种Oj题目大小写容易分辨不出来
//其次三种情况
int slen = s.length();
int plen = p.length();
List list = new ArrayList ();
if(slen < plen)
{
return list;
}
int [] scnt = new int[26];
int [] pcnt = new int [26];
for(int i = 0; i < plen ; i++)
{
scnt[s.charAt(i)-‘a’]++;
pcnt[p.charAt(i)-‘a’]++;
}
if(Arrays.equals(scnt,pcnt))
list.add(0);
for(int i = plen;i< slen ; i++)
{
scnt[s.charAt(i-plen)-‘a’]–;
scnt[s.charAt(i)-‘a’]++;
if(Arrays.equals(scnt,pcnt))
{
list.add(i-plen+1);
}
}
return list;
}
}
假&滑动窗口
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
总结
-
对于框架原理只能说个大概,真的深入某一部分具体的代码和实现方式就只能写出一个框架,许多细节注意不到。
-
算法方面还是很薄弱,好在面试官都很和蔼可亲,擅长发现人的美哈哈哈…(最好多刷一刷,不然影响你的工资和成功率???)
-
在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。
-
要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!
第一次跳槽十分忐忑不安,和没毕业的时候开始找工作是一样的感受,真的要相信自己,有条不紊的进行。如果有我能帮忙的地方欢迎随时找我,比如简历修改、内推、最起码,可以把烦心事说一说,人嘛都会有苦恼的~
的决策。
- 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!
第一次跳槽十分忐忑不安,和没毕业的时候开始找工作是一样的感受,真的要相信自己,有条不紊的进行。如果有我能帮忙的地方欢迎随时找我,比如简历修改、内推、最起码,可以把烦心事说一说,人嘛都会有苦恼的~
祝大家都有美好的未来,拿下满意的 offer。