最短摘要问题

/*
最短摘要问题,给一定字符串序列 wo,w1,w2,w3,op1,w4,op2,w5,op1,w6,w7,op1,op2,指定关键字符串为op1,op2,求包含关键字的最小字符串序列。
常见于搜索引擎的分词,op1,op2这里没有顺序,否则就更复杂了,最短序列为op1,op2。
思路:
(1)第一次扫描要包含全部关键词,送wo扫描到op2,即w0,w1,w2,w3,op1,w4,op2,随后左边逐渐缩小,知道第一次不全包含关键字为止(在扫描时候
就记录最短的),即w4,op2.此时移动右面知道第一次包含全部,即w4,op2,w5,op1.随后同理,左边逐渐缩小到又不全部包含关键字即为w5,op1,此时
右边继续扩展知道op2出现,即w5,op1,w6,w7,op1,op2,随后左边继续缩小即,op2 ,然后右边向右越界退出。最小为op1,op2
*/

//伪代码如下
int nTargetLen=N+1;
int pBegin=0;
int pEnd=0;
int nLen=N;
int nAbstractBegin=0;
int nAbstractEnd=0;

while(true)
{
    while(!isAllExisted()&&pEnd<pLen)
        pEnd++;
    while(isAllExisted())
    {
        if(pEnd-pBegin<nTargetLen)
        {
            pAbstractBegin=pBegin;
            nAbstractEnd=pEnd;
            nTargetLen=pEnd-pBegin;
        }
        pBegin++;
    }
    if(pEnd>=N)   //pEnd最大到N-1,如果到N了说明越界了,结束
        break;
}

最短摘要问题,布布扣,bubuko.com

时间: 2024-10-17 14:42:46

最短摘要问题的相关文章

编程之美-最短摘要

这个主要注意几点:首先,str[i]-str[j]包含keyword里面的所有词语,但是不要求顺序相同,然后,str[i]-str[j]是所有满足这样要求的最短子串. 主要方法是:deque<index> store: 记录当前摘要的所有单词在str中的下标,map<string, int> record记录所有当前摘要中出现的次数.min_len:当前最短摘要的长度.min_index_first:当前最短摘要的第一个词语在str中的下标,min_index_last:当前最短摘

最短摘要生成

题目: Alibaba笔试题:给定一段产品的英文描述,包含M个英文字母,每个英文单词以空格分隔,无其他标点符号: 再给定N个英文单词关键 字,请说明思路并编程实现方法String extractSummary(String description,String[] key words), 目标是找出此产品描述中包含N个关键字(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出.(不限编程语言)20分. 在网上看到一种用链表实现的方法,时间复杂度可以达到O(m+n).在这里实现一下. 分析

编程之美之最短摘要生成

书上给出了最短摘要的描述即算法,简单来说就是: 扫描过程始终保持一个[pBegin,pEnd]的range,初始化确保[pBegin,pEnd]的range里包含所有关键字 .然后每次迭代,尝试调整pBegin和pEnd: 1.pBegin递增,直到range无法包含所有关键字 2.pEnd递增,直到range重新包含所有关键字 计算新的range,与旧的range相比,看是否缩短了,如果是,则更新 不考虑关键字的先后顺序 .这里给出最短摘要算法的几个应用,首先是leetcode上面的两题: M

字符串----最短摘要生成

题目:Alibaba笔试题,给定一段产品的英文描述,包含M个英文单词,每个英文单词以空格分隔,无其他标点符号:再给定N个英文单词关键字,请说明思路并编程实现方法.String extractSummary(String description,String[] key words)目标是找出此产品描述中包含N个关键字(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出.(不限编程语言)20分. 思路一: 直接暴力解法,循环暴力破解,每次判断关键字是否全部包含,然后不断更新边界. 思路二:

3.5 最短摘要的声成

题目: Alibaba笔试题:给定一段产品的英文描述,包含M个英文字母,每个英文单词以空格分隔,无其他标点符号:再给定N个英文单词关键字,请说明思路并编程实现方法String extractSummary(String description,String[] key words),目标是找出此产品描述中包含N个关键字(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出.(不限编程语言)20分 这题跟书上3.5差不多意思的题目. 思路解法: 先来看看这些序列: w0,w1,w2,w3,q

【编程之美】3.5 最短摘要的生成

题目:有搜索后的网页分词序列 数组W 其中W[0].W[1]....W[N]为分好的词. 用户输入的关键词为数组 Q 其中Q[0].Q[1]...Q[M]为搜索的关键词. 找到W中最小的范围W[i]~W[j]让其包括所有的Q. 思路: 最想当然的思路就是从W[0]开始,对每个Q遍历判断有没有一样的,截取出第一个包含Q中元素的W[i]到最后一个包括Q中元素的W[j].需要O(MN)次比较. 如果前提能够肯定W中包含所有的Q那就,先从W[0]开始找到第一个包含Q的,再从W[N-1]向前找第一个包含Q

编程之美----最短摘要的生成

题意:假设给定的已经是经过网页分词之后的结果,词语序列数组为W.其中W[0], W[1], ... , W[N]为一些已经分好的词语.假设用户输入的搜索关键词为数组Q.其中Q[0], Q[1], ... Q[m]为所有输入的搜索关键词. 例如,我们可以看到这样一个序列: w0, w1, w2, w3, q0, w4, w5, q1, w6, w7, w8, q0,  w9, q1 解法思路: 第一次扫描时,假设包含所有关键词,将得到如下的结果(用 a 这种形式表示指向位置) w0, w1, w2

c++面试题【转】

语言部分: 虚函数,多态.这个概念几乎是必问. STL的使用和背后数据结构,vector string map set 和hash_map,hash_set 实现一个栈类,类似STL中的栈.这个题目初看非常简单,当时我还有点不屑,怎么出这么简单的题.但写过c++和没有写过c++的人写出的代码是一眼就能看出差别的.譬如三大函数有没有写,引用的使用,都非常的关键.如果这方面没有经验,建议阅读下http://book.douban.com/subject/1971825/ 这本书中简单数据结构的实现,

【编程之美】目录

第1章  游戏之乐——游戏中碰到的题目 1.1 让CPU占用率听你的指挥 1.2 中国象棋将帅问题 1.3 一摞烙饼的排序 1.4 买书问题 第2章  数字之魅——数字中的技巧 2.1 求二进制中1的个数 2.2 不要被阶乘吓倒 2.3 寻找发帖"水王" 2.4 1的数目 2.5 寻找最大的K个数 2.6 精确表达浮点数 2.7 最大公约数问题 2.8 找符合条件的整数 2.9 斐波那契(Fibonacci)数列 2.10 寻找数组中的最大值和最小值 2.11 寻找最近点对 2.12