编程之美-3.5最短摘要的生成
来源:互联网 发布:图像算法工程师前途 编辑:程序博客网 时间:2024/05/01 15:38
看了下《编程之美》这本书,记录下3.5节的理解。
1.题意是什么?
题目含义就是在已知字符串S1中搜索含有字符串S2的最小字符串,例如,S1="ABCDEMKFDC",S2="CDK",则应该返回“KFDC”.
“含有”意思是什么?即包含即可,不需要相同顺序。
原书写的有点拗口,其实对于关键字“微软亚洲研究院 使命”而言,最短摘要为“微软亚洲研究院成立于1998年,我们的使命”。一开始误以为网页返回的都是最短摘要了。
2.原书给出的代码不全,特此补全
解释下:
1)两个指针指向原字符串,两个指针指向最终生成的字符串
2)一开始先设定S1的长度为最小值,后来一旦包含“关键字字符串”,即计算长度,发现新长度比原来设定的小,即保存下来。
<span style="font-size:14px;">#include <iostream>#include <string>#include <algorithm>using namespace std;bool isAllExisted(string s1, string s2);string MinStr(string s1,string s2){int nlen = s1.length();int pBegin = 0;int pEnd = 0;int resBegin = 0;int resEnd = 0;while (1){while (pEnd < s1.length() && !isAllExisted(s1.substr(pBegin, pEnd - pBegin + 1), s2)){pEnd++;}while (isAllExisted(s1.substr(pBegin, pEnd - pBegin + 1), s2)){if (pEnd - pBegin+1 < nlen){nlen = pEnd - pBegin + 1;resBegin = pBegin;resEnd = pEnd;}pBegin++;}if (pEnd >= s1.length()){break;}}//cout << resBegin << resEnd << endl;return s1.substr(resBegin,resEnd-resBegin+1);}bool isAllExisted(string s1, string s2){string s(s1);for (int i = 0; i < s2.size();++i){if (find(s.begin(), s.end(), s2[i]) == s.end())return 0;else{s.erase(find(s.begin(), s.end(), s2[i]));}}return 1;}int main(int argc, char *argv[]){string s1 = "1234522637";string s2 = "232";string res = MinStr(s1,s2);cout << res << endl;return 0;}</span>
0 0
- 编程之美读书笔记--3.5 最短摘要的生成
- 编程之美--3.5最短摘要的生成
- 编程之美-3.5最短摘要的生成
- 编程之美----3.5最短摘要的生成
- 编程之美 最短摘要生成
- 编程之美之最短摘要生成的困惑
- 编程之美--最短摘要的生成
- 编程之美——最短摘要的生成
- 编程之美--最短摘要的生成
- 最短摘要的生成(编程之美)
- 《编程之美》——最短摘要的生成
- 编程之美-最短摘要的生成方法整理
- 编程之美读书笔记-最短摘要的生成
- 编程之美--3.5最短摘要生成
- 编程之美--3.5最短摘要生成
- 读书笔记之编程之美 - 3.5 最短摘要的生成
- 编程之美: 第三章 结构之法 3.5最短摘要的生成
- 编程之美3.5最短摘要的生成Java版
- shell的追踪与调试选项
- Robotium 基本资料
- JAVA的六大经典算法,代码案例简化分析
- js之事件冒泡和事件捕获详细介绍
- UE4 Post Process Effects on Mobile Platforms
- 编程之美-3.5最短摘要的生成
- Android Training - 管理应用的内存
- Account
- 用redis实现微博关注关系
- Groovy WEB网站中文乱码问题解决方案-过滤器
- OptionMenu布局问题
- 采用模态对话框交互时的变量传递
- POJ 2186 -- Popular Cows【强连通分支 && Tarjan缩点】
- Pipe - POJ 1039 几何