leetcode--30. Substring with Concatenation of All Words
2017-07-22 00:32
579 查看
问题
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 words exactly 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).
意思就是给你一个字符串,和一个字符串的数组,需要返回一个该字符串的索引组成的数组,返回的索引有如下性质:从每个索引开始,长度为L的字串需要精确包含字符串数组中的所有字符串(不多不少)。L 为字符串数组中所有字符串长度之和。
思路
参考了leetcode的讨论,总结思路如下:用一个map将数组中的字符串放进去,key为字符串,value为该字符在数组中出现的次数。然后用两个指针遍历原来的字符串。i来控制需要返回的起始索引。j来控制截取字符串。每次从一段范围内截出一个词,判断该词是否在map中,如果没有则立刻跳出循环。如果有,再取出该字符串对应的value,如果等于1,就将他从map中移除,如果大于1则将value减一。最后如果map为空,说明所有的字符串都匹配。添加i到list中,跳出循环,开始下一轮循环。代码如下:public List<Integer> findSubstring(String S, String[] L) { List<Integer> res = new ArrayList<Integer>(); if (S == null || L == null || L.length == 0) return res; int len = L[0].length(); Map<String, Integer> map = new HashMap<String, Integer>(); for (String w : L) map.put(w, map.containsKey(w) ? map.get(w) + 1 : 1); for(int i=0;i<=S.length()-len*L.length;i++){ Map<String, Integer> copy = new HashMap<String, Integer>(map); for(int j=0;j<L.length;j++){ String str = S.substring(i+j*len,i+j*len+len);//next word if(copy.containsKey(str)){ int count = copy.get(str); if(count == 1) copy.remove(str); else copy.put(str,count-1); if(copy.isEmpty()){ res.add(i); break; } }else{ break; } } } return res; }
相关文章推荐
- leetcode 30. Substring with Concatenation of All Words
- LeetCode 30. Substring with Concatenation of All Words
- LeetCode(30) Substring with Concatenation of All Words
- [LeetCode]30.Substring with Concatenation of All Words
- [LeetCode] 30. Substring with Concatenation of All Words 串联所有单词的子串
- LeetCode 30. Substring with Concatenation of All Words(单词连接)
- LeetCode 30 Substring with Concatenation of All Words
- LeetCode(30) Substring with Concatenation of All Words (java)
- LeetCode 30. Substring with Concatenation of All Words
- (Java)LeetCode-30. Substring with Concatenation of All Words
- LeetCode - 30. Substring with Concatenation of All Words
- leetcode 30. Substring with Concatenation of All Words
- [leetcode] 30 Substring with Concatenation of All Words
- [LeetCode] 30. Substring with Concatenation of All Words 解题思路 - Java
- LeetCode 30.Substring with Concatenation of All Words
- leetcode 30. Substring with Concatenation of All Words
- [Leetcode 30, Hard] Substring with Concatenation of All Words
- [理解leetcode解法]30. Substring with Concatenation of All Words找子串
- LeetCode 30 Substring with Concatenation of All Words (map)
- LeetCode 30 Substring with Concatenation of All Words(与所有文字串联子串)(*)