题目
描述
给定一个字符串 S 和有效单词的字典D,请确定可以插入到 S中的最小空格数,使得最终的字符串完全由D中的有效单词组成,并输出解。
如果没有解则应该输出 n/a
输入
第一行为字符串 S,第二行为词典单词数目 n,接下来 n行,每行为一个单词
输出
只有一行,为插入最少空格后的字符串
Example
Input
ilikealibaba
6
i
like
ali
liba
baba
alibaba
Output
i like alibaba
题解
DFS
- 深搜所有符合要求的解,过程剪枝
- 选择最优解输出
1 |
|
二分法
- 把字典按长度降序排序
- 匹配区间为 (s, e)
- 若 s==e ,则匹配成功,返回 true
- 在区间 (s, e) 内中匹配最长单词所在位置
- 每找到一个位置 pos ,则根据这个单词把区间 (s, e) 分为 (s, pos).(pos, pos+dict[i].length).(pos+dict[i].length, e) 三部分
- 对 前.后 两部分进行同样的操作
- 若 前.后 两部分匹配成功,则此区间匹配成功,返回 true
- 若匹配不成功,则寻找下个位置
- 若无下个位置则匹配次长单词
- 若没有匹配成功,则返回 false
1 |
|