LeetCode 030 Substring with Concatenation of All Words

题目要求: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).

 

分析:

参考网址:http://www.cnblogs.com/panda_lin/archive/2013/10/30/substring_with_concatenation_of_all_words.html

 

代码如下:

class Solution {

public:

    vector<int> findSubstring(string S, vector<string> &L) {

        

        int l_size = L.size();

        

        if (l_size <= 0) {

            return vector<int>();

        }

        

        vector<int> result;

        map<string, int> word_count;

        int word_size = L[0].size();

        int i, j;

        

        for (i = 0; i < l_size; ++i) {

            ++word_count[L[i]];

        }

        

        map<string, int> counting;

        

        for (i = 0; i <= (int)S.length() - (l_size * word_size); ++i) {

            

            counting.clear();

            

            for (j = 0; j < l_size; ++j) {

                string word = S.substr(i + j * word_size, word_size);

                

                if (word_count.find(word) != word_count.end()) {

                    ++counting[word];

                    

                    if (counting[word] > word_count[word]) {

                        break;

                    }

                }

                else {

                    break;

                }

            }

            

            if (j == l_size) {

                result.push_back(i);

            }

        }

        

        return result;

    }

};

 

你可能感兴趣的:(substring)