30. Substring with Concatenation of All Words

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).

2 pointer one stand the first letter, the other go through

    public IList<int> FindSubstring(string s, string[] words) {
        var res = new List<int>();
        if(words.Count()==0) return res;
        var hashtable = new Dictionary<string,int>();
        foreach(var word in words)
        {
            if(hashtable.ContainsKey(word)) hashtable[word] +=1;
            else hashtable.Add(word,1);
        }
        int wordSize = words[0].Length;

        for(int j =0;j<= s.Length - words.Count()*wordSize;j++)
        {
            var exist = new Dictionary<string,int>();
            int i=j;
            int count =0;
            while(i<=(s.Length - wordSize))
            {
                 string newWord = s.Substring(i,wordSize);
                 if(hashtable.ContainsKey(newWord))
                 {

                     if(exist.ContainsKey(newWord))
                     {
                         if(exist[newWord]<hashtable[newWord])
                         {
                             exist[newWord]++;
                             count++;
                             i += wordSize;
                             if(count ==words.Count())
                             {
                                 res.Add(j);
                                 break;
                             }
                         }
                         else  break;
                     }
                     else
                     {
                         exist.Add(newWord,1);
                         count++;
                         if(count ==words.Count())
                        {
                                 res.Add(j);
                                 break;
                        }
                         i += wordSize;
                     }
                 }
                 else break;
            }
        }
        return res;
    }
时间: 2024-10-03 08:04:13

30. Substring with Concatenation of All Words的相关文章

[Leetcode][Python]30: Substring with Concatenation of All Words

# -*- coding: utf8 -*-'''__author__ = '[email protected]' 30: Substring with Concatenation of All Wordshttps://oj.leetcode.com/problems/substring-with-concatenation-of-all-words/ You are given a string, S, and a list of words, L, that are all of the

LeetCode HashTable 30 Substring with Concatenation of All Words

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, giv

[LeetCode] 30. Substring with Concatenation of All Words 解题思路 - Java

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, give

leetCode 30.Substring with Concatenation of All Words (words中全部子串相连) 解题思路和方法

Substring with Concatenation of All Words 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 an

leetCode 30.Substring with Concatenation of All Words (words中所有子串相连) 解题思路和方法

Substring with Concatenation of All Words 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 an

[*leetcode 30] 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: "b

【LeetCode】30. Substring with Concatenation of All Words

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, giv

19.1.30 [LeetCode 30] Substring with Concatenation of All Words

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. Example 1: Input

LeetCode 30 Substring with Concatenation of All Words(与所有文字串联子串)(*)

翻译 给定一个字符串S,一个单词的列表words,全是相同的长度. 找到的子串(多个)以s即每个词的字串联恰好一次并没有任何插入的字符所有的起始索引. 原文 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