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");
}

}

results matching ""

    No results matching ""