题目简介:
哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子I reset the computer. It still didn’t boot!已经变成了"iresetthecomputeritstilldidntboot"。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。
示例:
1 | 输入: |
提示:
0 <= len(sentence) <= 1000dictionary中总字符数不超过 150000。- 你可以认为
dictionary和sentence中只包含小写字母。
思路:
利用动态规划的思想,dp[i]为sentence[0...i]的未匹配字符个数。
首先sentence = " " + sentence,处理边界问题。
定义一个哈希表,将字典中的单词存入。
将每个dp[i]初始化值为dp[i - 1] + 1(即先默认sentence[i]为不匹配字符),然后j从1遍历到i(sentence[0]为空格,单词表中可能有一个字符的单词),若sentence[j ... i]为单词表中的单词,则这部分是匹配成功的,所以dp[i] = min(dp[i], dp[j - 1])(保留最小值)。
最后返回dp[sentence.size() - 1]即可。
tip:
- 看题解用字典树效率更高,先留个坑以后来做。现在用的方法时间复杂度
O(n^2),用时感人…
代码如下:
1 | class Solution { |