static List<Integer> findAnagrams (String s, String p){
List<Integer> list =new ArrayList<>();
int i=0;
int j=p.length();
while(i<s.length() && j<=s.length()){
String substring = s.substring(i,j);
if(isAnagrams(substring,p)){
list.add(i);
}
i++;
j=i+p.length();
}
return list;
}
static boolean isAnagrams(String s1,String s2){
int[] sCount = new int[26];
int[] pCount = new int[26];
for (int i = 0; i < s2.length(); ++i) {
++sCount[s1.charAt(i) - 'a'];
++pCount[s2.charAt(i) - 'a'];
}
if (Arrays.equals(sCount, pCount)) {
return true;
}
return false;
}
public static List<Integer> findAnagrams1(String s, String p) {
int sLen = s.length(), pLen = p.length();
if (sLen < pLen) {
return new ArrayList<Integer>();
}
List<Integer> ans = new ArrayList<Integer>();
int[] sCount = new int[26];
int[] pCount = new int[26];
for (int i = 0; i < pLen; ++i) {
++sCount[s.charAt(i) - 'a'];
++pCount[p.charAt(i) - 'a'];
}
if (Arrays.equals(sCount, pCount)) {
ans.add(0);
}
for (int i = 0; i < sLen - pLen; ++i) {
--sCount[s.charAt(i) - 'a'];
++sCount[s.charAt(i + pLen) - 'a'];
if (Arrays.equals(sCount, pCount)) {
ans.add(i + 1);
}
}
return ans;
}