30 Substring with Concatenation of All Words

来源:互联网 发布:seo外包的优势 编辑:程序博客网 时间:2024/05/16 17:29

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).

import java.util.*;public class Solution {    public List<Integer> findSubstring(String S, String[] L) {        HashMap<String, Integer> map=new HashMap<String, Integer> ();        List<Integer> result=new ArrayList<Integer>();        if(S==null||S.length()==0||L==null||L.length==0) return result;        int w=L[0].length();        for(int i=0;i<L.length;i++){map.put(L[i],map.containsKey(L[i])? map.get(L[i])+1:1);}        for(int i=0;i<=S.length()-L.length*w;i++){            HashMap<String,Integer> tempmap=new HashMap<String, Integer>(map);            for(int j=0;j<L.length;j++){                String word=S.substring(i+j*w,i+j*w+w);                if(tempmap.containsKey(word)){                    int num=tempmap.get(word);                    num=num-1;                    if(num>0){                        tempmap.put(word,num);                    }else{                        tempmap.remove(word);                    }                }else{                    break;                }            }            if(tempmap.isEmpty()){                result.add(i);            }        }        return result;    }}


0 0
原创粉丝点击