• [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;
        }
    };
  • 相关阅读:
    【转载】区间DP
    基础DP的一些知识总结(未完成)
    POJ2718 递归套递归
    Hadoop Illuminated——Chapter4 BigData
    Hadoop Illuminated——Chapter3 Why do I Need Hadoop?
    一条SQL语句是怎么执行的
    Github 《算法竞赛进阶指南》资源
    Hadoop——搭建Hadoop的全分布模式
    Hadoop——免密码登陆的原理和配置
    洛谷——排序P1781宇宙总统
  • 原文地址:https://www.cnblogs.com/lilylee/p/5258664.html
Copyright © 2020-2023  润新知