30. Substring with Concatenation of All Words *HARD*
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).
vector<int> findSubstring(string S, vector<string> &L) {
    vector<int> result;
    if ( S.size()<= || L.size() <= ){
        return result;
    }
    int n = S.size(), m = L.size(), l = L[].size();
    //put all of words into a map
    map<string, int> expected;
    for(int i=; i<m; i++){
        if (expected.find(L[i])!=expected.end()){
            expected[L[i]]++;
        }else{
            expected[L[i]]=;
        }
    }
    for (int i=; i<l; i++){
        map<string, int> actual;
        int count = ; //total count
        int winLeft = i;
        for (int j=i; j<=n-l; j+=l){
            string word = S.substr(j, l);
            //if not found, then restart from j+1;
            if (expected.find(word) == expected.end() ) {
                actual.clear();
                count=;
                winLeft = j + l;
                continue;
            }
            count++;
            //count the number of "word"
            if (actual.find(word) == actual.end() ) {
                actual[word] = ;
            }else{
                actual[word]++;
            }
            // If there is more appearance of "word" than expected
            if (actual[word] > expected[word]){
                string tmp;
                do {
                    tmp = S.substr( winLeft, l );
                    count--;
                    actual[tmp]--;
                    winLeft += l;
                } while(tmp!=word);
            }
            // if total count equals L's size, find one result
            if ( count == m ){
                result.push_back(winLeft);
                string tmp = S.substr( winLeft, l );
                actual[tmp]--;
                winLeft += l;
                count--;
            }
        }
    }
    return result;
}
用map容器。
i从0到L-1。
actual[word] > expected[word]时舍弃前面的单词,向后查找。
30. Substring with Concatenation of All Words *HARD*的更多相关文章
- LeetCode - 30. Substring with Concatenation of All Words
		30. Substring with Concatenation of All Words Problem's Link --------------------------------------- ... 
- [Leetcode][Python]30: Substring with Concatenation of All Words
		# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 30: Substring with Concatenation of All ... 
- [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 sta ... 
- 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, tha ... 
- 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 sta ... 
- [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 sta ... 
- Java [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 a ... 
- 【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 sta ... 
- 【一天一道LeetCode】#30. Substring with Concatenation of All Words
		注:这道题之前跳过了,现在补回来 一天一道LeetCode系列 (一)题目 You are given a string, s, and a list of words, words, that ar ... 
- [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 sta ... 
随机推荐
- Java HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述
			Java HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述 一.HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述 用Java ... 
- elasticsearch分词器ik
			1. 下载和es配套的版本 git clone https://github.com/medcl/elasticsearch-analysis-ik 2. 编译 cd elasticsearch-an ... 
- 20145310《网络对抗技术》Exp6 信息搜集技术
			实验内容 本次实验的目标是掌握信息搜集的最基础技能.具体有 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 ( ... 
- Java实现心跳机制
			一.心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效.为了检测对方节点的有效性,每隔固定时间就发送一个固定信息给对方,对方回复一个固定信息 ... 
- 奇怪的分式|2014年蓝桥杯B组题解析第六题-fishers
			奇怪的分式 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念 ... 
- 打印图形|2014年蓝桥杯B组题解析第五题-fishers
			打印图形 小明在X星球的城堡中发现了如下图形和文字: rank=3 rank=5 rank = 6 小明开动脑筋,编写了如下的程序,实现该图形的打印. 答案:f(a, rank-1, row, col ... 
- POJ 3694 Network(并查集缩点 + 朴素的LCA + 无向图求桥)题解
			题意:给你一个无向图,有q次操作,每次连接两个点,问你每次操作后有几个桥 思路:我们先用tarjan求出所有的桥,同时我们可以用并查集缩点,fa表示缩点后的编号,还要记录每个节点父节点pre.我们知道 ... 
- spring boot application.properties/application.yml 配置属性大全
			来自官网 https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.h ... 
- css布局一屏幕的自适应高度
			css ;;list-style: none;} .top{height: 100px;background-color:orange;} .max{;background-color:skyblue ... 
- [Pytorch]Pytorch的tensor变量类型转换
			原文:https://blog.csdn.net/hustchenze/article/details/79154139 Pytorch的数据类型为各式各样的Tensor,Tensor可以理解为高维矩 ... 
