
微软面试题 之 "单词的划分"
发布日期:2021-05-09 04:09:42
浏览次数:15
分类:博客文章
本文共 1615 字,大约阅读时间需要 5 分钟。
Problem
有一个很长的由小写字母组成字符串。为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词。
出于减少分析量的目的,我们希望划分出的单词数越少越好。你就是来完成这一划分工作的。
Input
第一行为一整数T,表示有T组测试数据。
每组测试数据第一行为一字符串。(长度小于256)
第二行为一整数N。(1<=N<=100)
以下N行,每行一个单词。
Output
一个整数,表示字符串可以被划分成的最少的单词数。
Sample Input
1 realityour 5 real reality it your our
Sample Output
2code: #include <cstdio>#include <cstring>#include <set>#include <functional>using namespace std;enum { MAX_LEN = 256 };struct sless : public binary_function<const char*, const char*, bool>{ bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; }};int split_string(char* s, const set<const char*, sless>& words){ if (s == 0) return 0; int m[MAX_LEN] = {0}; int len = strlen(s); for (int i = 0; i < len; ++i) { char ch = s[i+1]; s[i+1] = 0; if (words.find(s) != words.end()) m[i] = 1; else { int minimum = INT_MAX; for (int j = i; j > 0; --j) { if (m[j-1] != 0 && words.find(s+j) != words.end()) minimum = min(m[j-1]+1, minimum); } m[i] = minimum; } s[i+1] = ch; } return m[len-1];} int main(){#if 0 // for lazy testing char s[] = "realityour"; const char* words[] = { "real", "reality", "it", "your", "our", 0 }; set<const char*, sless> ws; for (int i = 0; words[i] != 0; ++i) ws.insert(words[i]); int result = split_string(s, ws); printf("result: %d\n", result);#endif int size; scanf("%d", &size); for (int i = 0; i < size; ++i) { char s[MAX_LEN] = {0}; scanf("%s", s); int num; scanf("%d", &num); set<const char*, sless> ws; for (int j = 0; j < num; ++j) { char* in = new char[128]; memset(in, 0, 128); scanf("%s", in); ws.insert(in); } printf("%d\n", split_string(s, ws)); }}
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月20日 06时51分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java中Object.equals()简单用法
2021-05-09
poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)
2021-05-09
程序员的开发文档
2021-05-09
mybatis generator修改默认生成的sql模板
2021-05-09
算法 - 如何从股票买卖中,获得最大收益
2021-05-09
算法 - 链表操作思想 && case
2021-05-09
C#之反射、元数据详解
2021-05-09
通俗易懂设计模式解析——单例模式
2021-05-09
通俗易懂设计模式解析——抽象工厂模式
2021-05-09
前端数据渲染及mustache模板引擎的简单实现
2021-05-09
设计模式系列之工厂模式三兄弟(Factory Pattern)
2021-05-09
OAuth2.0认证详解
2021-05-09
在滴滴和头条干了 2 年后端开发,太真实…
2021-05-09
你还在用命令看日志?快用 Kibana 吧,一张图片胜过千万行日志!
2021-05-09
Linux中对用户操作
2021-05-09
Linux查看CUDA和cuDNN版本
2021-05-09
No.017:Letter Combinations of a Phone Number
2021-05-09
C#获取Excel中所有的Sheet名称
2021-05-09
jQuery实现日期字符串格式化
2021-05-09
[最全整理]关于决策树的一切
2021-05-09