美文网首页
30. Substring with Concatenation

30. Substring with Concatenation

作者: yunmengze | 来源:发表于2018-09-23 23:58 被阅读0次

    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:
      s = "barfoothefoobarman",
      words = ["foo","bar"]
    Output: [0,9]
    Explanation: Substrings starting at index 0 and 9 are "barfoor" and "foobar" respectively.
    The output order does not matter, returning [9,0] is fine too.
    

    这道题可以使用哈希表遍历的方式解决。先用一个哈希表存储所有单词出现的次数,然后遍历字符串,用一个新的哈希表存储字串中单词出现的次数。由于规定了每个单词的长度相同,所以这种方法实现起来不难。由于好久不做题,跟着别人的想法写的答案提交了好几次才通过,果然需要多加练习。

    class Solution {
    public:
        vector<int> findSubstring(string s, vector<string>& words) {
            vector<int> res;
            if(s.empty() || words.empty())
                return res;
            unordered_map<string, int> wordCount;
            for(auto item:words){
                wordCount[item]++;
            }
            int strLen = s.size();
            int wordLen = words[0].size();
            int numOfWords = words.size();
            int finalIndex = strLen - wordLen*words.size();
            for(int i=0; i<=finalIndex; i++){
                unordered_map<string, int> tempCount;
                for(int j=0; j<numOfWords; j++){
                    string tempStr = s.substr(i+j*wordLen, wordLen);
                    if(wordCount.find(tempStr) != wordCount.end()){
                        tempCount[tempStr]++;
                        if(tempCount[tempStr] > wordCount[tempStr]){
                            break;
                        }
                        if(j == numOfWords-1)
                            res.push_back(i);
                    }
                    else{
                        break;
                    }
                }
            }
            return res;
        }
    };
    

    相关文章

      网友评论

          本文标题:30. Substring with Concatenation

          本文链接:https://www.haomeiwen.com/subject/yyfcoftx.html