438. 找到字符串中所有字母异位词
作者:
名字是乱打的 | 来源:发表于
2021-12-24 01:03 被阅读0次
一 题目:
二 思路:
- 滑动窗口法
- 将p数组长度作为滑动窗口大小
- 每个窗口内的值为字符以及其数量
- 注意,每次窗口移动要把窗口外的那个字符的数量减1,因为他不在窗口内了,每次移动要把新的字符数量进行加1,以为他在窗口内了,移动完毕,我们只要比较窗口内的字符的以及数量是否和P相等即可
三 代码:
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> res=new LinkedList<>();
int sLen = s.length(),pLen=p.length();
if (pLen>sLen){
return res;
}
//s链表
int[] sChar=new int[26];
//标准窗口(比对项)
int[] pChar=new int[26];
//滑动窗口比对项
for (int i = 0; i < pLen; i++) {
sChar[s.charAt(i)-'a']++;
pChar[p.charAt(i)-'a']++;
}
//初始化的窗口是否相同,这里提前判断,让后面的for的判断聚焦于窗口尾部
if (Arrays.equals(sChar,pChar)){
res.add(0);
}
for (int i = pLen; i < sLen; i++) {
//将每次滑动后,被移除窗口的那个数字的字符所在位置数量-1
sChar[s.charAt(i-pLen)-'a']--;
//当前位置字符数量+1
sChar[s.charAt(i)-'a']++;
//窗口比对,check过程
if (Arrays.equals(sChar,pChar)){
res.add(i-pLen+1);
}
}
return res;
}
}
本文标题:438. 找到字符串中所有字母异位词
本文链接:https://www.haomeiwen.com/subject/lezkqrtx.html
网友评论