码迷,mamicode.com
首页 > 其他好文 > 详细

编程之美-最短摘要

时间:2014-09-06 23:43:34      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:style   sp   on   c   工作   new   程序   bs   r   

这个主要注意几点:首先,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:当前最短摘要的最后一个词语在str中的下标。    

    第一步,寻找第一个完整摘要,更新storerecord。如果没找到,程序结束。如果找到了计算min_len,min_index_first,min_index_last;,然后进行第二步。

第二步,队列中去掉一个第一个关键词,同时更新record,如果record中该关键词计数还大于0,这说明虽然当前摘要短了,但是还是完整的,因此这必然是一个更短的摘要,min_len--;min_index_first++; 重复第二步。 如果record中关键词的计数为0了,这说明当前摘要不完整了,需要向后面找缺少的关键词,进入第三步。

 

即,如果从前面缩小不成功,那么从后面增大,后面增大得到的 满足条件的 序列长度还要比较长度,如果比原有的长度大那么舍弃,维持原判。

 

   第三步,在当前摘要后面寻找缺少的关键词。如果下标越界了,说明不能再找到完整的摘要了,停止工作即可。如果找到的不是关键词,index++,即向后移动继续找。如果找到的是关键词更新storerecord,此时如果找到的关键词刚好还是缺少的关键词,那么转向第二步,无论与否,记得index++先。

编程之美-最短摘要

标签:style   sp   on   c   工作   new   程序   bs   r   

原文地址:http://www.cnblogs.com/notlate/p/3959910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!