刪除字元;及interleave字串分析
今日面試題:刪除字元
刪除字串中的“b”和“ac”,需要滿足如下的條件:
1. 字串只能遍歷一次
2. 不能夠實用額外的空間
例如:
1. acbac ==> ""
2. aaac ==> aa
3. ababac ==> aa
4. bbbbd ==> d
進一步思考:如何處理aaccac呢,需要做哪些改變呢?
=================================================
interleave字串分析
原題
3個字串a,b,c。判斷c是否是a和b的interleave,也就是c中應該有a,b中所有字 符,並且c中字元順序和a,b中一樣。比如,
1. a = "ef" b = "gh" c = "egfh" return true;
2. a = "ef" b = "gh" c = "ehgf" return false。
分析
這個題目中,並沒有說明a和b中是否有相同的字元,這個直接影響了最終的解法。所以,大家在面試的過程中,要和麵試官進行互動,弄清楚之後再動手。我們這裡對於是否有相同的字元都給予分析。希望對大家有所幫助。
a和b沒有相同字元的情況
這個情況處理起來比較簡單,逐個字元遍歷c字串,首先處理第一個字元,將其與a中的字元匹配,如果沒有匹配,則與b中的字元逐個匹配,如果沒有匹 配,則返回false;如果a中或者b中有一個字元和c的第一個字元匹配上了,則如上考慮第二個字元,與c的第一個字元匹配上的字串,也考慮第二個字 符,依次類推。直到c遍歷完,這時,如果a和b還有字元沒有遍歷,也返回false,都遍歷完畢,返回true。程式碼如下:
上面演算法的時間複雜度是多少呢?我們只需要考慮a和b的遍歷情況,要麼a++,要麼b++,所以演算法的時間複雜度為O(m+n),m和n分別為a和b的長度。a和b這兩個字串,各自遍歷一遍即可。
a和b有相同字元的情況
上面的演算法,不能夠處理a和b中有相同字元的情況,例如a="XXY",b="XXZ",c="XXZXXY"。如果要處理,有相同字元的情況也是 比較直接的。有相同的出現,如果都匹配了c中的字元,則兩種匹配分別都考慮,只要有一個返回true,整個演算法就返回true。
注意後面是||,兩種情況都要考慮的。
上面這個演算法的時間複雜度,在最壞的情況下是指數級的。所以,下面介紹一個動態規劃的解法。一個問題能夠用動態規劃來解的一個前提是:要有重複的子 問題。這樣把子問題的解儲存起來,後面重複利用才可以提高演算法的效率。這個問題有子問題麼?考慮一個極端的例 子:a="XXX",b="XXX",c="XXXXXX"。子問題,顯然存在。再不然,畫出遞迴樹,就很明瞭了。
我們採用二維表來儲存子問題的結果,IL[i][j]如果為true,則表示c[0..i+j-1]是a[0..i-1]和b[0..j-1]的interleave字串。演算法實現的過程於上面的遞迴類似:
通過動態規劃的方法改進,演算法的時間複雜度O(mn),空間複雜度O(mn)。
【分析完畢】
本文來自微信:待字閨中,2013-09-17釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- interleave字串;及括號匹配分析字串
- 字串-刪除指定字元字串字元
- 迴文分割;及刪除字元分析字元
- JavaScript 刪除字串重複字元JavaScript字串字元
- JavaScript刪除字串中重複字元JavaScript字串字元
- JavaScript刪除字串中所有指定字元JavaScript字串字元
- JavaScript 刪除字串中所有指定字元JavaScript字串字元
- JavaScript刪除字串中的指定字元JavaScript字串字元
- python如何刪除字串的特殊字元Python字串字元
- JavaScript刪除字串中重複的字元JavaScript字串字元
- js刪除字串的第一個字元JS字串字元
- C#刪除字串最後一個字元C#字串字元
- javascript刪除字串重複字元程式碼例項JavaScript字串字元
- javascript刪除字串中的最後一個字元JavaScript字串字元
- Python字串刪除第一個字元常用的方法!Python字串字元
- Python如何刪除字串中多餘空白字元?Python字串字元
- JS 刪除字串最後一個字元的幾種方法JS字串字元
- js刪除字串中最後一個字元程式碼例項JS字串字元
- 2.刪除字串中的某個字元。(藉助字元陣列實現)字串字元陣列
- 【劍指offer】刪除在另一個字串中出現的字元字串字元
- JavaScript 刪除重複字元JavaScript字元
- Js刪除字串中的指定字串JS字串
- 使用js刪除字串中的最後一個字元例項程式碼JS字串字元
- JavaScript刪除字串兩端空格JavaScript字串
- javascript刪除字串中的空格JavaScript字串
- 刪除字串中的子串字串
- 第3章-17 刪除字元 (30分)字元
- e語音 【刪除文字右邊字元】字元
- PHP刪除字串中的逗號PHP字串
- js如何刪除字串中的空格JS字串
- jQuery刪除字串兩端的空格jQuery字串
- 如何刪除字串內部的空格字串
- 點選退格鍵刪除整個單詞而不是逐個字元刪除字元
- Python刪除列表中的非字母字元Python字元
- LintCode 1905. 字元刪除 Java字元Java
- iOS 多選刪除(附tableViewTips及單選刪除)iOSView
- JavaScript 刪除字串中非漢字內容JavaScript字串
- javascript刪除字串中的html標籤JavaScript字串HTML