题目描述

给一个字符串, 然后给一个字典。 把字符串分解成字典里的单词组成的句子, 请输出所需空格最少的方案。并输出该方案。

样例

例如: 字符串为: str="ilikealibaba", 字典为dict= {"i", "like", "ali", "ba", "alibaba", "baba"}

输入:
ilikealibaba
6
i
like
ali
ba
alibaba
baba 输出:
i like alibaba

解题思路:

空格最少,很显然用BFS应该可以做。 不过状态转移的时候需要写个小函数, 另外由于需要打印路径,所以要记录一下路径。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <unordered_set>
#include <unordered_map>
#include <algorithm>
#include <stdexcept>
#include <cstring>
using namespace std; struct Node
{
string word; // 当前匹配过的单词
int pos; // 记录下一个要匹配的位置
string path; // 记录路径
}; int matchW(const string& str, int pos, const string word)
{
for(int i = 0; i < word.size(); i++)
{
if(pos >= str.size())
return -1;
if(str[pos++] != word[i])
return -1;
} return pos;
} void mincut(const string& str, const set<string>& dict)
{
if(str.size() == 0)
{
printf("n/a\n");
return;
} queue<Node> qu;
for(auto it : dict)
{
int tmp = matchW(str, 0, it);
if(tmp != -1) // 该单词是否能匹配
{
Node tt;
tt.word = it;
tt.pos = tmp;
tt.path += it;
qu.push(tt);
}
} while(!qu.empty())
{
int len = qu.size();
while(len--)
{
Node tt = qu.front();
qu.pop();
if(tt.pos == str.size()) // 已匹配完成
{
cout << tt.path << endl; // 打印路径
return;
} for(auto it : dict)
{
int tmp = matchW(str, tt.pos, it);
if(tmp != -1)
{
Node gg;
gg.word = it;
gg.pos = tmp;
gg.path = tt.path + " " + it;
qu.push(gg);
}
}
}
} printf("n/a\n");
} int main(int argc, const char * argv[])
{
string strS;
string dictStr;
int nDict;
set<string> dict; cin>>strS;
cin>>nDict;
for (int i = 0; i < nDict; i++)
{
cin>>dictStr;
dict.insert(dictStr);
}
mincut(strS, dict); return 0;
}

2017阿里C++研发工程师-校招-单词匹配的更多相关文章

  1. 2017阿里C++研发工程师-校招-笔试模拟

    题目描述: 猎人把一对兔子婴儿(一公一母称为一对)放到一个荒岛上,两年之后,它们生00下一对小兔,之后开始每年都会生下一对小兔.生下的小兔又会以同样的方式继续繁殖. 兔子的寿命都是x(x>=3) ...

  2. 专访阿里资深研发工程师窦贤明:PG与商业数据库差距并不明显

    窦贤明认为, 支持类型.功能和语法丰富,性能优良   9月24日,窦贤明将参加在北京举办的线下活动,并做主题为<Greenplum分片案例分析>的分享.值此,他分享了PG.工作上的一些经历 ...

  3. 阿里Java研发工程师实习面经

    十分幸运 拿到阿里云的offer,感谢周围无数人对我的支持和鼓励,所以写篇面经希望可以帮助大家. 面试中,运气占很大一部分的,所以你们若是没有通过,一定不要气馁,继续加油. 每个努力的人 都值得钦佩, ...

  4. 阿里Java研发工程师实习面经,附面试技巧

    作者:如何进阿里 链接:https://www.nowcoder.com/discuss/72899?type=0&order=0&pos=17&page=1 来源:牛客网 前 ...

  5. 学生党如何拿到阿里技术offer: 《2016阿里巴巴校招内推offer之Java研发工程师(成功)》

    摘要: 这篇文章字字珠玑,这位面试的学长并非计算机相关专业,但是其技术功底足以使很多计算机专业的学生汗颜,这篇文章值得我们仔细品读,其逻辑条理清晰,问题把握透彻,语言表达精炼,为我们提供了宝贵的学习经 ...

  6. 2015年阿里实习生面试Java研发工程师 小记

    5月5日,广州,阿里实习生面试,Java研发工程师,完全被虐orz 几乎没有Java项目开发经验,接近零基础,去水了一发,毫无悬念的被刷了..RP也是杠杠的,准备过的题目一个都没被问到,算法题也是一条 ...

  7. 蚂蚁金服财富技术部,诚招Java研发工程师。校招内推!!!

    蚂蚁金服财富技术部,诚招Java研发工程师. 团队是蚂蚁金服财富技术部核心团队,支持亿级互联网交易清算,在这里不仅能学习到先进的互联网技术,也能了解许多终身受益的金融知识. 内推对象 2020届毕业生 ...

  8. Java研发工程师知识点总结

    Java研发工程师知识点总结 最近一次更新2017年12月08日 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 ...

  9. web前端研发工程师编程能力成长之路

    [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年WEB产品前端研发,迷茫找不着提高之路,看这篇文章吧:如果你是四五年的前端开发高手,没有难题能难得住你的 ...

随机推荐

  1. 基于spring的shiro配置

    shiro是一个特别简单,易用的框架,在此记录一下shiro的使用配置. 首先,创建四张表:user  role  user_role  permission,分别为用户.角色.用户与角色关系表和权限 ...

  2. 解决VMware Workstation虚拟机不能联网的解决办法

    在windows服务中查看,以下几个服务是否正常开启,没有就开启

  3. angularJs-脏检查

    来自:http://www.cnblogs.com/liuyanan/p/4935652.html scope是一个指向应用model的object,也是表达式的执行上下文. scope被放置在一个类 ...

  4. Centos7.0安装mysql5.6

    环境 CentOS 7.0(64-bit system) mysql-5.6.37 一.mysql依赖libaio,所以要先安装libaio # yum search libaio           ...

  5. imToken 测评通关攻略

    imToken 测评通关攻略 2017-10-19 imToken 在 1.3.3 版本新增了用户风险测评系统, 目的是为了让更多的用户了解钱包安全知识以及区块链的基本概念, 从某种程度上提升了整个区 ...

  6. EasyUI 的常见标签

    1. Resizable 属性 原理: 页面加载完毕后,EasyUI主文件会扫描页面上的每个标签,判断这些标签的class值是否以"easyui-"开头, 如果是,则拿到之后的部分 ...

  7. beego

    https://www.kancloud.cn/hello123/beego/126087

  8. JS代码识别扫码设备

    <!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8" ...

  9. AntiSamy测试

    AntiSamy为owasp针对xss提供的处理库,可以配置xml策略来决定过滤的内容,比如标签.属性.css等,自定义策略给开发人员使用成本比较高,AntiSamy也提供了几个内置的策略,其安全级别 ...

  10. Linux下的信号机制

    2017-04-06 之前在看LinuxThreads线程模型的时候,看到该模型是通过信号实现线程间的同步,当时没有多想,直接当做信号量了,现在想起来真是汗颜……后来想想并不是那么回事,于是,就有了今 ...