日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试题 17.13. 恢复空格

發布時間:2024/5/7 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试题 17.13. 恢复空格 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Title

哦,不!你不小心把一個長篇文章中的空格、標點都刪掉了,并且大寫也弄成了小寫。像句子"I reset the computer. It still didn’t boot!“已經變成了"iresetthecomputeritstilldidntboot”。在處理標點符號和大小寫之前,你得先把它斷成詞語。當然了,你有一本厚厚的詞典dictionary,不過,有些詞沒在詞典里。假設文章用sentence表示,設計一個算法,把文章斷開,要求未識別的字符最少,返回未識別的字符數。

示例:

輸入:
dictionary = [“looked”,“just”,“like”,“her”,“brother”]
sentence = “jesslookedjustliketimherbrother”
輸出: 7
解釋: 斷句后為"jess looked just like tim her brother",共7個未識別字符。

提示:

0 <= len(sentence) <= 1000
dictionary中總字符數不超過 150000。
你可以認為dictionary和sentence中只包含小寫字母。

Trie + 動態規劃

Solve

定義 dp[i] 表示考慮前 i 個字符最少的未識別的字符數量,從前往后計算 dp 值。

考慮轉移方程,每次轉移的時候我們考慮第 j(j≤i) 個到第 i 個字符組成的子串 sentence[j?1?i?1] (注意字符串下標從 0 開始)是否能在詞典中找到,如果能找到的話按照定義轉移方程即為

dp[i]=min(dp[i],dp[j?1])dp[i]=min(dp[i],dp[j?1])dp[i]=min(dp[i],dp[j?1])

否則沒有找到的話我們可以復用 dp[i?1] 的狀態再加上當前未被識別的第 i 個字符,因此此時 dp 值為

dp[i]=dp[i?1]+1dp[i]=dp[i?1]+1dp[i]=dp[i?1]+1

最后問題化簡成了轉移的時候如何快速判斷當前子串是否存在于詞典中,可以通過字典樹 Trie 來優化查找。

Trie 是一種最大程度利用多個字符串前綴信息的數據結構,它可以在 O(w) 的時間復雜度內判斷一個字符串是否是一個字符串集合中某個字符串的前綴,其中 w 代表字符串的長度。

我們將詞典中所有的單詞「反序」插入字典樹中,然后每次轉移的時候我們從當前的下標 i 出發倒序遍歷 i?1,i?2,?,0。在 Trie 上從根節點出發開始走,直到走到當前的字符 sentence[j] 在 Trie 上沒有相應的位置,說明 sentence[j?i?1] 不存在在詞典中,且它已經不是「任意一個單詞的后綴」,此時我們直接跳出循環即可。否則,我們需要判斷當前的子串是否是一個單詞,這里我們直接在插入 Trie 的時候在單詞末尾的節點打上一個 isEnd 的標記即可,這樣我們在走到某個節點的時候就可以判斷是否是一個單詞的末尾并根據狀態轉移方程更新我們的 dp 值。

具體實現以及示例的圖畫解析可以看下面:

Code

動態規劃

def respace(self, dictionary: List[str], sentence: str) -> int:n = len(sentence)dp = [i for i in range(n + 1)]for i in range(n):for j in range(i, -1, -1):if sentence[j:i + 1] in dictionary:dp[i + 1] = min(dp[i + 1], dp[j])else:dp[i + 1] = min(dp[i + 1], dp[i] + 1)return dp[-1]

動態規劃+字典樹

class Solution:def respace(self, dictionary, sentence: str) -> int:trie = Trie()# 初始化字典樹for word in dictionary:cur = triefor i in range(len(word)-1, -1, -1):cur = cur.next_nodes[word[i]]cur.isEnd = Truedp = [float('inf') for _ in range(len(sentence)+1)]dp[0] = 0for i in range(1, len(sentence)+1):dp[i] = dp[i - 1] + 1j = icur = triewhile j >= 1 and sentence[j-1] in cur.next_nodes:cur = cur.next_nodes[sentence[j]]if cur.isEnd == True:dp[i] = min(dp[i], dp[j-1])if dp[i] == 0:breakj -= 1return dp[-1]class Trie:def __init__(self):self.next_nodes = collections.defaultdict(Trie)self.isEnd = False 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的面试题 17.13. 恢复空格的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99久久99久久精品国产片桃花 | 免费黄色三级 | 亚洲激情图片 | 国产亚洲制服 | av免费网页 | 国产精品自拍亚洲 | 国产香蕉视频在线播放 | 国产自产一区二区 | 西野翔之公侵犯中文字幕 | 亚洲天堂美女 | 奇米777视频 | 沈樵精品国产成av片 | 中文字幕在线三区 | 国产日韩不卡 | 午夜视频在线免费观看 | 中日韩在线 | 久久久久久色 | 哪个网站可以看毛片 | 日韩精品影视 | 波多野结衣中文字幕一区二区三区 | 亚洲制服丝袜在线播放 | 摸摸大奶子 | 福利所导航 | 少妇高潮灌满白浆毛片免费看 | 亚洲熟妇无码另类久久久 | 国产在线视视频有精品 | 亚洲精品高潮久久久久久久 | 99欧美精品 | 爱爱视频一区二区 | 亚洲一区二区三区视频在线 | 黄网在线观看视频 | free欧美性69护士呻吟 | 日韩性xxxx| 亚洲精品视频一二三区 | 极品新婚夜少妇真紧 | 欧美性猛交aaaa片黑人 | 精品视频在线观看 | 午夜嘿嘿嘿| 亚洲综合另类小说 | 18精品爽国产白嫩精品 | 精品久久网 | 中文字幕精品无码一区二区 | 6080av| 主播福利在线 | 色八区| 久久久久久久久久久久久久av | 黄色录像毛片 | 国产99久久九九精品无码 | 亚洲一在线 | 高柳家在线观看 | 91久久一区二区 | 都市激情av | 香蕉视频在线观看黄 | 久久99精品久久久久久园产越南 | 宅男的天堂 | 国产在线不卡视频 | 日韩精品视频一区二区 | 蜜桃av噜噜一区二区三区网址 | 午夜一级片 | 一级黄色欧美 | 国产精品乱码一区二三区小蝌蚪 | 日韩aⅴ视频 | 精品成人久久 | 污污视频在线 | 91丝袜视频 | 中文国产字幕 | 精品久久久久久中文字幕人妻最新 | 日韩欧美一区二区三区在线观看 | 国产精品久久国产 | 亚洲欧美另类在线视频 | 每日av更新 | 亚洲精品乱码久久久久久国产主播 | 亚洲天堂成人在线 | 国产毛片毛片毛片 | 开心综合网 | 男女羞羞动态图 | 二区三区偷拍浴室洗澡视频 | 黄色a级片视频 | 色撸撸在线视频 | 久久久婷 | 伊人7| 久久艹国产精品 | 九九九九九伊人 | 亚洲美女免费视频 | 少妇大叫太粗太大爽一区二区 | 美美女高清毛片视频免费观看 | 亚洲精品国产91 | 色射网| 日韩国产一区 | 亚洲国产精品视频 | 久久久久国产一区二区三区潘金莲 | 国产卡一卡二卡三无线乱码新区 | 日韩精品小视频 | 能直接看的av | 久久综合免费视频 | 午夜激情小视频 | 美女久久 | 中文字幕第十二页 | 91香蕉视频黄 |