LeetCode Java First 400 문제 풀이 - 030
                                            
 5690 단어  문 제 를 풀다
                    
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). public List findSubstring(String s, String[] words) {
     if (words.length == 0 || words[0].length() == 0)
        return new ArrayList<>();
    HashMap map =  new HashMap<>();
    for (String word : words)
        map.put(word, map.getOrDefault(word, 0) + 1);
    List list =  new ArrayList<>();
    int gap = words[0].length();
    int nlen = words.length * gap;
    for (int k = 0; k < gap; k++) {
        HashMap wordmap =  new HashMap<>(map);
        for (int startIndex = k, shift = 0; startIndex < s.length() - nlen + 1
                && startIndex + shift <= s.length() - gap; ) {
            String temp = s.substring(startIndex + shift, startIndex + shift + gap);
            if (wordmap.containsKey(temp)) {
                wordmap.put(temp, wordmap.get(temp) - 1);
                if (wordmap.get(temp) == 0)
                    wordmap.remove(temp);
                if (wordmap.isEmpty())
                    list.add(startIndex);
                shift += gap;
            } else {
                if (shift == 0)
                    startIndex += gap;
                else {
                    wordmap.put(s.substring(startIndex, startIndex + gap),
                            wordmap.getOrDefault(s.substring(startIndex, startIndex + gap), 0)
                                    + 1);
                    startIndex += gap;
                    shift -= gap;
                }
            }
        }
    }
    return list;
}  :    。       ,        (      startIndex   shift        ),        ,       -1,     0       ,      ,      。          ,           ,         。이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode Java First 400 문제 풀이 - 030Substring with Concatenation of All Words Hard You are given a string, s, and a list of words, words, that are all of...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.