最少插入字元;及分詞問題分析

紫鳳發表於2013-11-01

今日面試題:最少插入字元

給定字串,可以通過插入字元,使其變為迴文。求最少插入字元的數量。例如:

1. ab最少插入1個字元,變為bab

2. aa最少插入0個字元

3. abcd最少插入3個字元,dcbabcd

============================================================

分詞問題分析

原題

給定字串,以及一個字典,判斷字串是否能夠拆分為欄位中的單詞。例如,欄位為{hello,world},字串為hellohelloworld,則可以拆分為hello,hello,world,都是字典中的單詞。

分析

這個題目喚作“分詞問題”,略顯寬泛。只是想提及這個問題,這是在自然語言處理,搜尋引擎等等領域中,非常基礎的一個問題,解決的方法也比較多,相對比較成熟,不過這仍舊是一個值得進一步探索的問題。那我們先從這個簡單的題目入手,看看如何處理題目中這個問題。 最直接的思路就是遞迴,很簡單。我們考慮每一個字首,是否在字典中?如果在,則遞迴處理剩下的字串,如果不在;則考慮其他字首。示例程式碼如下:

enter image description here

在上面的程式碼中:每一種情況都要處理substr,程式的耗時比較長,如果在OJ上提交,乾脆超時的,那麼如何改進呢?

這個題目的處理,上期的題目是很相似的。在遞迴子問題中,找重複的子問題。也非常明顯,如下圖(圖片來自GeeksforGeeks)所示:

enter image description here

所以,通過動態規劃的方法,可以通過有較大幅度的提升,同樣,這個題目與前面的每一個狀態都有關係的,所以,是一個二重迴圈,時間複雜度為O(n^2)。示例程式碼如下:

enter image description here

除此之外,這個問題的方法是非常多的,大家還有什麼思路呢?歡迎大家展開思路,在微博上互動討論。 經過上一期的問題,還有這一期的,我想對於這類問題,遞迴以及動態規劃方法的改進,童鞋們應該有比較好的體會了。希望大家能多做寫聯絡,比如在OJ上,熟能生巧,提升程式碼功力。

【分析完畢】

本文來自微信:待字閨中,2013-10-15釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。

相關文章