程序员面试金典 - 面试题 17.13. 恢复空格(DP+Trie树)
文章目錄
- 1. 題目
- 2. 解題
- 2.1 動(dòng)態(tài)規(guī)劃
- 2.2 Trie樹
1. 題目
哦,不!你不小心把一個(gè)長篇文章中的空格、標(biāo)點(diǎn)都刪掉了,并且大寫也弄成了小寫。
像句子"I reset the computer. It still didn’t boot!"已經(jīng)變成了"iresetthecomputeritstilldidntboot"。
在處理標(biāo)點(diǎn)符號(hào)和大小寫之前,你得先把它斷成詞語。
當(dāng)然了,你有一本厚厚的詞典dictionary,不過,有些詞沒在詞典里。
假設(shè)文章用sentence表示,設(shè)計(jì)一個(gè)算法,把文章斷開,要求未識(shí)別的字符最少,返回未識(shí)別的字符數(shù)。
注意:本題相對(duì)原題稍作改動(dòng),只需返回未識(shí)別的字符數(shù)
示例: 輸入: dictionary = ["looked","just","like","her","brother"] sentence = "jesslookedjustliketimherbrother" 輸出: 7 解釋: 斷句后為"jess looked just like tim her brother",共7個(gè)未識(shí)別字符。(jess tim)提示: 0 <= len(sentence) <= 1000 dictionary中總字符數(shù)不超過 150000。 你可以認(rèn)為dictionary和sentence中只包含小寫字母。來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/re-space-lcci
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
2.1 動(dòng)態(tài)規(guī)劃
- dp[i] 表示包含 i 字符結(jié)尾的字符串 最少的未識(shí)別字符數(shù),初始為 i+1(全部未識(shí)別)
- 將 [ 0, i ] 區(qū)間切分,[ 0, j-1 ],[ j, i ] ,遍歷所有的 j (j <= i)
- 如果字典包含字符串 [ j, i ],dp[i]=min?(dp[i],dp[j?1])dp[i] = \min(dp[i], dp[j-1])dp[i]=min(dp[i],dp[j?1])
- 如果字典不包含字符串 [ j, i ],dp[i]=min?(dp[i],dp[j?1]+i?j+1)dp[i] = \min(dp[i], dp[j-1]+i-j+1)dp[i]=min(dp[i],dp[j?1]+i?j+1)
- 一旦 dp[i] == 0,可以終止內(nèi)層循環(huán)
1156 ms 446.1 MB
2.2 Trie樹
- 在上面的思路下,將字典字符串反向插入trie樹
- 內(nèi)層循環(huán)可以改為向前在trie樹中查找存在的字符串最大長度,一旦不存在某個(gè)字符就不必再往前遍歷了,因?yàn)榭隙ú淮嬖?#xff0c;可以提高效率。
120 ms 153.8 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的程序员面试金典 - 面试题 17.13. 恢复空格(DP+Trie树)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 第 21 场双周赛(7
- 下一篇: 程序员面试金典 - 面试题 04.03.