package contests; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Created by sherxon on 2/18/17. */ public class COnArray { int[] a = new int[26]; public static void main(String[] args) { System.out.println(new COnArray().findAnagrams( "cbaebabacd", "abc" )); } public List<Integer> findAnagrams(String s, String p) { List<Integer> list = new ArrayList<>(); if (s.length() == 0 || p.length() == 0 || p.length() > s.length()) return list; int sum = hash(p); int h = hash(s.substring(0, p.length())); for (int i = 1; i <= s.length() - p.length() + 1; i++) { if (sum == h && valid(p, s.substring(i, i + p.length() - 1))) list.add(i - 1); if (i + p.length() - 1 < s.length()) h += s.charAt(i + p.length() - 1); h -= s.charAt(i - 1); } return list; } int hash(String s) { int h = 0; for (int i = 0; i < s.length(); i++) { h += s.charAt(i); } return h; } boolean valid(String s, String t) { Arrays.fill(a, 0); for (int i = 0; i < s.length(); i++) { a[s.charAt(i) - 'a']++; } for (int i = 0; i < t.length(); i++) { int index = t.charAt(i) - 'a'; if (a[index] == 0) return false; a[index]--; } return true; } }