[LeetCode]Substring with Concatenation of All Words

来源:互联网 发布:开源cms系统排名 编辑:程序博客网 时间:2024/05/16 10:51

Substring with Concatenation of All Words

My Submissions
Total Accepted: 42899 Total Submissions: 215720 Difficulty: Hard

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

For example, given:
s"barfoothefoobarman"
words["foo", "bar"]

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

Subscribe to see which companies asked this question











这个题目是一个非常让人蛋疼的事情,提交了好多次都是超时。尽量在各个地方节约时间

上代码

import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class Solution {public List<Integer> findSubstring(String s, String[] words) {List<Integer>result = new ArrayList<>();HashMap<String, Integer>hashMap=new HashMap<>();HashMap<String, Integer>curHashMap=new HashMap<>();if(words.length==0||s.length()<words[0].length())return result;int len=words[0].length();for(int i=0;i<words.length;i++){Integer count = hashMap.get(words[i]);if(count==null){hashMap.put(words[i], 1);}else{hashMap.put(words[i],count+1);}}//因为题目中要求words中所有的词都出现一变,所以i的范围要控制,减小循环次数for(int i = 0;i<=s.length()-len*words.length;i++){int j;curHashMap.clear();for(j=0;j<words.length;j++){String word = s.substring(i+j*len,i+(j+1)*len);if(!hashMap.containsKey(word)){break;}Integer count = curHashMap.get(word);if (count==null) {curHashMap.put(word, 1);}else{curHashMap.put(word,count+1);//这里用的是+号,如果用hashmap-1的话会超时}if(curHashMap.get(word)>hashMap.get(word)){break;}}if(j==words.length){result.add(i);}}        return result;    }    public static void main(String[]args){    Solution solution = new Solution();    System.out.println(solution.findSubstring("aaaa",new String[]{"aa","aa"}));    }}


0 0
原创粉丝点击