[CTCI] 最长合成字符串
题目描述
有一组单词,请编写一个程序,在数组中找出由数组中字符串组成的最长的串A,即A是由其它单词组成的(可重复)最长的单词。
给定一个string数组str,同时给定数组的大小n。请返回最长单词的长度,保证题意所述的最长单词存在。
["a","b","c","ab","bc","abc"],6
返回:3
递归&备忘录。
class LongestString {
public:
bool canBuild(string &s, bool isOriginalWord, map<string, bool> &mp) {
if (mp.find(s) != mp.end() && !isOriginalWord) return mp[s];
for (int i = ; i < s.length(); ++i) {
string left = s.substr(, i);
string right = s.substr(i);
if (mp.find(left) != mp.end() && mp[left] && canBuild(right, false, mp)) {
return true;
}
}
mp[s] = false;
return false;
}
int getLongest(vector<string> str, int n) {
// write code here
map<string, bool> mp;
for (auto &s : str) mp[s] = true;
sort(str.begin(), str.end(), [](const string &a, const string &b) {
return a.length() > b.length();
});
for (auto &s : str) {
if (canBuild(s, true, mp)) return s.length();
}
return ;
}
};
[CTCI] 最长合成字符串的更多相关文章
- sql 截取字符串与 截取字符串最长的字符串
); set @str='aa,32,22,55,7'; ) as '第一个逗号的索引值' )),),),'') as '第一个值' ),len(@str)) as '从第一逗号开始截取出后面的字符串 ...
- java 将长度很长的字符串(巨大字符串超过4000字节)插入oracle的clob字段时会报错的解决方案
直接很长的字符串插入到clob字段中会报字符过长的异常,相信大家都会碰到这种情况 String sql = "insert into table(request_id,table_name, ...
- DP最长递增字符串
对于最简单DP问题,比如7 9 1 10 3中最长的递增字符串就是7 9 10,所以长度是3. 对于这个问题,就是从第二个开始,让后面的每一个字符都假设作为咱们要找的最长的字符串的最后一个字符,然后从 ...
- pojg2744找一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是y的子串,或者x中的字符反序之后得到的新字符串是y的子串。
http://poj.grids.cn/practice/2744 描述现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是 ...
- 给一个非常长的字符串str 另一个字符集比方{a,b,c} 找出str 里包括{a,b,c}的最短子串。要求O(n)
给一个非常长的字符串str 另一个字符集比方{a,b,c} 找出str 里包括{a,b,c}的最短子串.要求O(n). 比方,字符集是a,b,c,字符串是abdcaabcx,则最短子串为abc. 设置 ...
- 最长重复字符串题解 golang
最长重复字符串题解 package main import ( "fmt" "strings" ) type Index map[int]int type Co ...
- 算法 -- 求最长公共字符串&PHP
https://blog.csdn.net/hongyuancao/article/details/83308093 本文是利用PHP,求最长公共字符串.思路:利用动态规划和矩阵的思想. 动态规划:就 ...
- 求字符串A与字符串B的最长公共字符串(JAVA)
思路:引入一个矩阵的思想,把字符串A(长度为m)当成矩阵的行,把字符串B(长度为n)当矩阵的列.这样就构成一个m*n的矩阵.若该矩阵的节点相应的字符同样,即m[i]=n[j]时.该节点值为1:当前字符 ...
- Python求包含数字或字母最长的字符串及长度
一.求包含数字或字母最长的字符串及长度 org = 'ss121*2222&sdfs2!aaabb' result = [] #保存最终要输出的字符串 result_temp = [] #保存 ...
随机推荐
- 如何在MyEclipse配置Gradle
1.首先下载gradle gdk http://services.gradle.org/distributions 选一个bin或者all的下载即可 2.配置path GRADLE_HOME D:\ ...
- 如何捕获 System.loadLibrary 产生的异常?(转)
如何捕获 System.loadLibrary 产生的异常? 当使用以下代码时,会发现异常处理的代码根本不会被执行: try{ System.loadLibrary("SimpleAuthe ...
- javascript用正則表達式检測username的合法性
在用户登录.用户注冊时经常须要对username如邮箱.手机号进行校验,一般经常使用表达式. 以下整理对邮箱和手机号的表达式校验: function checkUser(){ var userName ...
- 〖Network〗宿舍配置两路由器,同时访问校园内网和校园外网
环境: 校园宿舍, 10.x.x.x 和 172.16.x.x~172.31.x.x是校园内网,本科教务系统什么的都在上边 路由器: 路由器1(校园内网):水星MR807 路由器2(拨号上网):TP ...
- SpringCloud学习资料
CSDN博客:http://blog.csdn.net/k21325/article/details/52789829 http://blog.csdn.net/qq_26562641/article ...
- codevs 2010 求后序遍历
时间限制: 1 s空间限制: 64000 KB题目描述 Description输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列.输入描述 Input Description共两行,第一行一个字符 ...
- RHEL7 光盘修复
光盘修复#rm -rf /boot/*#dd if=/dev/zero of=/dev/sda bs=446 count=1#systemctl rebootTroubleshooting(排错模式) ...
- 转:3d max 2013 安装教程,凭着一种互联网精神提供给广大朋友
看到有人在ps区咨询如何安装3d max教程,当你进行第一步之前,请先断开网络连接第一步:运行安装程序 第二步:接受安装协议,点击下一步会提示输入序列号 第三步:你会看到已经安装完成了的界面 第四部: ...
- vmware与virtualbox之对比分析
2012-04-01 16:01:17 vmware与virtualbox之对比分析 测试过程:本机安装双系统xp.ubuntu:在每个系统中安装两种虚拟机:每个虚拟机虚拟一个Win ...
- sqlite元数据
sqlite数据库每个文件都是一个database,因此同一个文件内部不再划分database.sqlite没有提供像mysql那样的show tables;和desc 表名类似的语句.许多数据库的元 ...