• [Leetcode]Substring with Concatenation of All Words


    No. 30, Substring with Concatenation of All Words

    这个题其实一开始我都没明白什么意思。。。读了好几遍,发现是在s中找一个子串,这个子串里面包含words中的全部词,而且次数都跟words中一样,同时这个子串中不能含有其他多余的字符,输出符合要求的子串们的begin index。words中的词长度完全一样。

    这道题目我采用了两个map,一个记录words中每个单词及它们出现的次数,另一个记录当前判断的子串中每个单词及它们出现的次数。Index从0开始遍历,一直到s.size()-wordNum*wordLen,因为后面的长度不足够产生这样的子串。将当前判断的子串按照words中单词的长度进行划分,如果出现了不在words中的单词或者当前某单词数量多于words中的数量,说明该Index不可能引导这样一个子串。

    class Solution {
    public:
        vector<int> findSubstring(string s, vector<string>& words) {
            map<string,int> words_;
            map<string,int> cur;
            int wordNum=words.size();
            int wordLen=words[0].size();
            vector<int> result;
            for(int i=0;i<wordNum;i++){
                words_[words[i]]++;
            }
            for(int i=0;i<=(int)s.size()-wordNum*wordLen;i++){
                cur.clear();
                int j=0;
                for(;j<wordNum;j++){
                    string word=s.substr(i+j*wordLen,wordLen);
                    if(words_.find(word)==words_.end()){
                        break;
                    }
                    cur[word]++;
                    if(cur[word]>words_[word])
                        break;
                }
                if(j==wordNum)
                    result.push_back(i);
            }
            return result;
        }
    };
  • 相关阅读:
    Python多进程实现并行化随机森林
    Python多进程队列间传递对象
    Umlet和draw.io 使用心得
    简单认识Adam优化器
    使用BERT进行情感分类预测及代码实例
    【深度学习】深入理解Batch Normalization批标准化
    Vue插件总结
    Vue配置环境识别
    pc端微信上传BUG
    Vue原生订单列表
  • 原文地址:https://www.cnblogs.com/lilylee/p/5258664.html
Copyright © 2020-2023  润新知