Substring with Concatenation of All Words

来源:互联网 发布:加粉猫软件下载 编辑:程序博客网 时间:2024/06/18 04:34

You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices of substring(s) in S that is a concatenation of each word in L exactly once and without any intervening characters.

For example, given:
S"barfoothefoobarman"
L["foo", "bar"]

You should return the indices: [0,9].
(order does not matter).

注意此题字典中可能存在重复的字符串。不会写,参考:http://www.cnblogs.com/springfor/p/3872516.html

Source

    public List<Integer> findSubstring(String S, String[] L) {        List<Integer> a = new ArrayList<Integer>();        if(S.length() == 0 || L.length == 0) return a;                HashMap<String, Integer> hm = new HashMap<String, Integer>();                for(int i = 0; i < L.length; i++){        if(!hm.containsKey(L[i])){        hm.put(L[i], 1);        }        else{        hm.put(L[i], hm.get(L[i]) + 1);        }        }                for(int i = 0; i < L[0].length(); i++){        int cnt = 0;        int index = i;        HashMap<String, Integer> cur = new HashMap<String, Integer>();        for(int j = i; j <= S.length() - L[0].length(); j += L[0].length()){        String temp = S.substring(j, j + L[0].length());        if(!hm.containsKey(temp)){        cur.clear();        cnt = 0;        index = j + L[0].length();        }        else{        if(!cur.containsKey(temp))        cur.put(temp, 1);        else{        cur.put(temp, cur.get(temp) + 1);        }        if(cur.get(temp) <= hm.get(temp))        cnt++;        else{        while(cur.get(temp) > hm.get(temp)){        String b = S.substring(index, index + L[0].length());        cur.put(b, cur.get(b) - 1);        index = index + L[0].length();        if(cur.get(b) < hm.get(b))        cnt--;        }        }        if(cnt == L.length){            a.add(index);            String b = S.substring(index, index + L[0].length());            cur.put(b, cur.get(b) - 1);            index = index + L[0].length();            cnt--;            }        }                }        }        return a;    }



0 0
原创粉丝点击