import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author xnl
* @Description:
* @date: 2022/7/4 22:50
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
String s = "cbaebabacd", p = "abc";
System.out.println(solution.findAnagrams(s, p));
}
/**
* 滑动窗口,用数组来统计是否匹配
* @param s
* @param p
* @return
*/
public List<Integer> findAnagrams(String s, String p) {
List<Integer> res = new ArrayList<>();
int m = s.length(), n = p.length();
if (m < n){
return res;
}
int[] sArr = new int[26];
int[] pArr = new int[26];
for (int i = 0; i < n; i++){
sArr[s.charAt(i) - 'a']++;
pArr[p.charAt(i) - 'a']++;
}
if (Arrays.equals(sArr, pArr)){
res.add(0);
}
// 滑动窗口进行比较
for (int i = 0; i < m - n; i++){
sArr[s.charAt(i) - 'a']--;
sArr[s.charAt(i + n) - 'a']++;
if (Arrays.equals(sArr, pArr)){
res.add(i + 1);
}
}
return res;
}
}
力扣:剑指 Offer II 015. 字符串中的所有变位词
最新推荐文章于 2024-09-30 10:36:33 发布