sub anagram string
第二题两个string一长T 一短S, find anagramsubstring of S in T in linear time http://www.geeksforgeeks.org/anagram-substring-search-search-permutations/ http://www.practice.geeksforgeeks.org/problem-page.php?pid=259
思路一(笨),如果t很长的话,那么可以找出s的permutation,然后再看t是不是含有这些就行了 思路二,
fing index public class SearchAnagramSubstring {
public static List<String> match(String t, String s) {
List<String> list = new ArrayList<String>();
int[] count = new int[256];
//count s char
for (char c : s.toCharArray())
count[c]++;
int[] tc = new int[256];
//count target char
for (int i = 0; i < s.length(); i++) {
tc[t.charAt(i)]++;
}
if (matchCount(count, tc))
list.add(t.substring(0, s.length()));
for (int i = s.length(); i < t.length(); i++) {
tc[t.charAt(i - s.length())]--;
tc[t.charAt(i)]++;
if (matchCount(count, tc))
list.add(t.substring(i - s.length() + 1, i + 1);
}
//for (int num : list)
// System.out.print(num + " ");
return list;
}
private static boolean matchCount(int[] a, int[] b) {
for (int i = 0; i < a.length; i++)
if (a[i] != b[i])
return false;
return true;
}
public static void main(String[] args) {
match("BACDGABCDA", "ABCD");
}
}