《Cracking the Coding Interview程序员面试金典》----最长合成字符串
来源:互联网 发布:域名在线评估 编辑:程序博客网 时间:2024/06/05 10:59
时间限制:3秒 空间限制:32768K 热度指数:352
算法知识视频讲解题目描述
有一组单词,请编写一个程序,在数组中找出由数组中字符串组成的最长的串A,即A是由其它单词组成的(可重复)最长的单词。
给定一个string数组str,同时给定数组的大小n。请返回最长单词的长度,保证题意所述的最长单词存在。
测试样例:
["a","b","c","ab","bc","abc"],6
返回:3
思路:先遍历一遍,构造哈希,然后遍历列表,将每个单词分成可能的两半,通过哈希查找看左右两半是否在列表内,在就记录,并且更新最长。如果是多个单词组成,则将右半部分是否在列表中改为递归检查右半部分是否有列表中其他元素
代码如下:
#include<iostream>#include<vector>#include<map>#include<queue>#include<algorithm>using namespace std;bool compare(string str1, string str2){return str1.size()<str2.size();}bool match(vector<string>& str, string s, int k) //判断第k+1个字符串能否由前k个字符串表示{for (int i = k - 1; i >= 0; i--){if (str[i] == s)return true;if (str[i].size()<s.size())break;}for (int i = 1; i<s.size(); i++){if (match(str, s.substr(0, i), k) && match(str, s.substr(i), k))return true;}return false;}int getLongest(vector<string> str, int n){// write code hereint length = 0;sort(str.begin(), str.end(), compare);for (int i = str.size() - 1; i >= 0; i--){if (match(str, str[i], i)){length = str[i].size();break;}}return length;}int main(){vector<string> v;int m;string temp;while (cin >> m){v.clear();for (int j = 0; j < m; j++){cin >> temp;v.push_back(temp);}//printVector(getMiddle(v, m),m);cout << getLongest(v, m) << endl;}return 0;}
不懂的可以加我的QQ群:261035036(IT程序员面试宝典
群) 欢迎你的到来哦,看了博文给点脚印呗,谢谢啦~~
0 0
- 《Cracking the Coding Interview程序员面试金典》----最长合成字符串
- cracking the coding interview 中文版 (程序员面试金典)
- cracking the coding interview 中文版 (程序员面试金典)
- 《Cracking the Coding Interview程序员面试金典》----空格替换
- 《Cracking the Coding Interview程序员面试金典》----像素翻转
- 《Cracking the Coding Interview程序员面试金典》----清除行列
- 《Cracking the Coding Interview程序员面试金典》----实时中位数
- 《Cracking the Coding Interview程序员面试金典》----词频统计
- 《Cracking the Coding Interview程序员面试金典》----数字发音
- 《Cracking the Coding Interview程序员面试金典》-----
- cracking the coding interview 中文版 (程序员面试金典)
- 《Cracking the Coding Interview程序员面试金典》----基本字符串压缩
- 《Cracking the Coding Interview程序员面试金典》----字符串变换(字典树)
- 《Cracking the Coding Interview程序员面试金典》----确定字符互异
- 《Cracking the Coding Interview程序员面试金典》----原串翻转
- 《Cracking the Coding Interview程序员面试金典》----确定两串乱序同构
- 《Cracking the Coding Interview程序员面试金典》----C++重载>>和<<(输入输出运算符)
- 《Cracking the Coding Interview程序员面试金典》----翻转子串
- Java阶段性测试--第二三大题参考代码
- cocos2dx游戏开发学习笔记(三)
- http如何像tcp一样实时的收消息
- dom对象与jquery对象相互转换
- Java8新增日期
- 《Cracking the Coding Interview程序员面试金典》----最长合成字符串
- HttpClient 4.3超时设置
- 武汉工程大学致各位家长及同学们的一封公开信
- JAVA实现调整数组顺序使奇数位于偶数前面问题(《剑指 offer》)
- cocos2d-x v3.15更新日志
- scoket如何处理粘包和分包
- 项目总结
- 聚类算法之Clustering by Local Gravitation
- 数组和链表的区别