一、题目:
给定两个字符串s和p,找到s中所有p的异位词,返回这些子串的起始索引。

二、思路
用数组p_fre[26]记录字符串的p中每个字符出现的次数,用一个指针left+字符串的长度来维护一个窗口,统计字符串的频率,并与p_fre[26]比较,相等则将指针left加入结果集当中。
三、代码
class Solution {
public List<Integer> findAnagrams(String s, String p) {
List<Integer> res = new ArrayList<>();
int sLen = s.length(),pLen = p.length();
int [] p_fre = new int[26];
for(char c : p.toCharArray()){
p_fre[c - 'a']++;
}
int left = 0;
while(left + pLen <= sLen){
int[] s_fre = new int[26];
for(int i = left; i<left+pLen;i++){
s_fre[s.charAt(i) - 'a']++;
}
if(Arrays.equals(s_fre,p_fre)){
res.add(left);
}
left++;
}
return res;
}
}
四、记录语法
Arrays.equals(s_fre,p_fre)比较两个数组是否相等。
978

被折叠的 条评论
为什么被折叠?



