subString concatenation of All w

2018-12-09  本文已影响0人  怎样会更好

思路,使用两个map,一个map收集单词的频率一个用来存遍历的时候的单词。

class Solution {
    public List<Integer> findSubstring(String s, String[] words) {
        List<Integer> res = new ArrayList<>();
        if(words.length == 0){
            return res;
        }
        Map<String,Integer> count = new HashMap<>();
        //使用一个数组记数组内单词出现的频率。
        for(String word : words){
            count.put(word, count.getOrDefault(word,0)+1);
        }
        int n = s.length();
        int num = words.length;
        //单词的长度
        int len = words[0].length();
        int j= 0 ;
        Map<String,Integer> inde = new HashMap<>();
        for(int i = 0,length = n - num * len;i<=length;i++){
            inde.clear();
            j = 0;
            while(j<num){
                String s1 = s.substring(i+j*len,i+(j+1)*len);
                if(count.containsKey(s1)){
                    inde.put(s1,inde.getOrDefault(s1,0)+1);
                    if(inde.get(s1)>count.get(s1)){
                        break;
                    }
                }else{
                    break;
                }
                j++;
            }
            if(j == num){
                res.add(i);
            }
        }
        return res;
    }
}
上一篇下一篇

猜你喜欢

热点阅读