阿里校招内推C++岗位编程题第一题 空格最少的字符串
给定一个字符串S和有效单词的字典D,请确定可以插入到S中的最小空格数,使得最终的字符串完全由D中的有效单词组成。并输出解。
如果没有解则应该输出n/a
例如:
输入:
S = “ilikealibaba”
D = {"i","like","ali","liba","baba","alibaba"}
输出:
“i like alibaba”
解释:
字符串S可能被字典D这样拆分
"i like ali baba"
“i like alibaba”
很显然,第二个拆分结果是空格数最少的解。
思路:
目前只实现了最朴素的回溯法,复杂度可能有点儿高。需要剪枝策略,暂时未实现,待更新。
用start代表从字符串str的start位置开始,遍历中间结果,如果子串str.substr(start,i-start+1)在字典里面继续递归查找。
如果start已经到str末尾,则递归结束,将此时的结果temp保存到ret中。
最后遍历ret,返回ret中字符串个数最少的结果即为所求。
void mincut(int start,const string& str, const set<string>& dict,vector<vector<string>>& ret,vector<string>&temp)
{
if(start>=str.length())
{
ret.push_back(temp);
return;
}
string a;
for(int i=start;i<str.length();i++)
{
a = str.substr(start,i-start+);
if(dict.find(a) == dict.end() )continue;
temp.push_back(a);
mincut(i+,str,dict,ret,temp);
temp.pop_back();
}
}
void mincut(const string& str, const set<string>& dict)
{
vector<vector<string>> ret;
vector<string> temp;
vector<string>result; mincut(,str,dict,ret,temp);
int min_size = str.size()+, index =-;
for(int i=;i<ret.size();i++)//找到最少字符串的结果
{
if(min_size >ret[i].size())
{
min_size = ret[i].size();
index = i;
}
}
if(index!=-)result = ret[index];
else
{
cout<<"n\a"<<endl;
return;
} for(int i=;i<result.size();i++)
{
if(i==)cout<<result[i];
else cout<<" "<<result[i];
}
cout<<endl;
}
int main()
{
string str = "ilikealibaba";
set<string>dict = {"i","like","ali","liba","baba","alibaba"}; mincut(str,dict);
}
阿里校招内推C++岗位编程题第一题 空格最少的字符串的更多相关文章
- 学生党如何拿到阿里技术offer: 《2016阿里巴巴校招内推offer之Java研发工程师(成功)》
摘要: 这篇文章字字珠玑,这位面试的学长并非计算机相关专业,但是其技术功底足以使很多计算机专业的学生汗颜,这篇文章值得我们仔细品读,其逻辑条理清晰,问题把握透彻,语言表达精炼,为我们提供了宝贵的学习经 ...
- 阿里提前批校招内推offer经历
经过一个半月的阿里内推面试,今天终于收到了阿里的offer邮件 .阿里的内推面试一共有四轮,本人是7月19号投的内推邮件,8月28号收到了offer的邮件.首先本人谈谈内推的看法.内推是公司招聘人才的 ...
- 剑指Offer——网易校招内推笔试题+模拟题知识点总结
剑指Offer--网易校招内推笔试题+模拟题知识点总结 前言 2016.8.2 19:00网易校招内推笔试开始进行.前天晚上利用大约1小时时间完成了测评(这个必须做,关切到你能否参与面试).上午利用2 ...
- 蚂蚁金服财富技术部,诚招Java研发工程师。校招内推!!!
蚂蚁金服财富技术部,诚招Java研发工程师. 团队是蚂蚁金服财富技术部核心团队,支持亿级互联网交易清算,在这里不仅能学习到先进的互联网技术,也能了解许多终身受益的金融知识. 内推对象 2020届毕业生 ...
- 网易2019校招内推编程题-瞌睡-C++实现
[编程题] 瞌睡 时间限制:1秒 空间限制:262144K 小易觉得高数课太无聊了,决定睡觉.不过他对课上的一些内容挺感兴趣,所以希望你在老师讲到有趣的部分的时候叫醒他一下.你知道了小易对一堂课每分钟 ...
- 网易2019校招内推编程题-俄罗斯方块-C++实现
[编程题] 俄罗斯方块 时间限制:1秒 空间限制:262144K 小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块.因为它比较古老,所以规则和一般的俄罗斯方块不同.荧幕上一共有 n 列,每次都会有 ...
- 网易2018校招内推编程题-堆棋子-C++实现
链接:https://www.nowcoder.com/questionTerminal/27f3672f17f94a289f3de86b69f8a25b来源:牛客网 [编程题]堆棋子 热度指数:14 ...
- 2016校招内推 -- 腾讯SNG前端 -- 面试经历
也是让某湿兄帮忙内推,然后过了四五天,电话打来了 一面: 1.首先是简单的自我介绍 2.你觉得一个前端工程师应该具备什么技能 比如用户体验这个方面他就贵问你具体的例子 3.让你设计一个web站点,假如 ...
- DDCX2018届校招内推笔试——算法工程师
-------------------------------------------------------------------------[选择题]---------------------- ...
随机推荐
- Cannot set HTTP gem source: “source https://rubygems.org not present in cache”
My ruby version in Windows 10: > ruby -v ruby 2.3.1p112 (2016-04-26 revision 54768) [i386-mingw32 ...
- Appstore|IPA
ios提审报错:No suitable application records were found. Verify your bundle identifier 'xx' is correct - ...
- 【Java】abstract,final,static,private,protected,public的区别
[abstract]抽象的 1. abstract可以修饰类和成员方法,被abstract修饰的类称为抽象类,被abstract修饰成员方法叫抽象方法.抽象类不一定有抽象方法,但拥有抽象方法的类一定是 ...
- Android编译命令
目录 说在前面 编译流程 编译指令 代码编译 代码检索 其他指令 说在前面 从最开始接触Android系统开始,每次进行代码编译都需要网上搜索编译指令.后来大致熟悉了Android的编译体系,加深了对 ...
- Go语言中的流程控制
1 概述 Go语言提供了条件分支 if,状态分支 switch,循环 for,跳转 goto,延迟执行 defer,这些流程控制语句.分别作说明如下: 2 条件分支 if 依据条件是否满足确定执行哪个 ...
- 北京Uber优步司机奖励政策(1月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 成都Uber优步司机奖励政策(1月26日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- ORB-SLAM(九)LocalMapping
LocalMapping作用是将Tracking中送来的关键帧放在mlNewKeyFrame列表中:处理新关键帧,地图点检查剔除,生成新地图点,Local BA,关键帧剔除.主要工作在于维护局部地图, ...
- springBoot 中webSocket 应用一
<html> <head> <meta charset="UTF-8"> <title>websocket测试</title& ...
- 后续博客转移到zhylj.cc
此博客暂不更新了 zhylj.cc