[LeetCode] Substring with Concatenation of All Words
2013-09-23 11:33
435 查看
Substring with Concatenation of All Words
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).
这两天为了准备WAP的面试正好在练习JAVA,于是重写了这道题,发现JAVA果然好简洁。
思路就不说了,还是那个滑动窗口。
public class Solution {
public ArrayList<Integer> findSubstring(String S, String[] L) {
// Start typing your Java solution below
// DO NOT write main() function
ArrayList<Integer> ret=new ArrayList<Integer>();
if ( S==null || L==null || L.length==0 )
return ret;
HashMap<String,Integer> words=new HashMap<String,Integer>();
// HashMap<String,Integer> need =new HashMap<String,Integer>();
for(int i=0;i<L.length;i++){
if ( words.containsKey(L[i]) ){
int t = words.get(L[i]);
words.put(L[i], t+1);
//need.put(L[i], t+1);
}else{
words.put(L[i],1);
// need.put(L[i],1);
}
}
int wordLength=L[0].length();
for(int i=0;i<wordLength;i++){
HashMap<String,Integer> need =new HashMap<String,Integer>(words);
int start=i,end=i;
int needCnt=L.length;
if ( (S.length()-start)< (wordLength*needCnt))
break;
for(;end<S.length();end+=wordLength){
if ( S.length()-end < wordLength )
break;
String tmp= S.substring(end,end+wordLength);
if (words.containsKey(tmp)){
int t=need.get(tmp);
need.put(tmp,t-1);
if ( t>0)
needCnt--;
}
if ( needCnt==0 ){
while(true){
String toRemove=S.substring(start,start+wordLength);
if (words.containsKey(toRemove) ){
int t =need.get(toRemove);
if ( t <0 ){
need.put(toRemove,t+1);
}
else
break;
}
start+=wordLength;
}
if (end-start == wordLength*(L.length-1))
ret.add(start);
}
}
}
return ret;
}
}
相关文章推荐
- LeetCode 30 Substring with Concatenation of All Words (map)
- LeetCode Substring with Concatenation of All Words
- [LeetCode] 30. Substring with Concatenation of All Words ☆☆☆
- [LeetCode]Substring with concatenation of all words
- 2017-09-19 LeetCode_030 Substring with Concatenation of All Words
- [LeetCode]030-Substring with Concatenation of All Words
- LeetCode-Substring with Concatenation of All Words
- 【LeetCode】Substring with Concatenation of All Words
- [LeetCode]Substring with Concatenation of All Words
- LeetCode Substring with Concatenation of All Words暴力法暴力法更加暴力的方法
- [leetcode 30] Substring with Concatenation of All Words
- LeetCode Substring with Concatenation of All Words
- LeetCode: Substring with Concatenation of All Words
- [LeetCode] Substring with Concatenation of All Words 解题报告
- LeetCode-30-Substring with Concatenation of All Words 暴力+Map灵活数据结构
- LeetCode 30. Substring with Concatenation of All Words----Python实现
- LeetCode 30 Substring with Concatenation of All Words(AC自动机+滑动窗口)
- Substring with Concatenation of All Words--LeetCode
- LeetCode Substring with Concatenation of All Words
- LeetCode 30 Substring with Concatenation of All Words 解法为Hashmap