迴文分割;及刪除字元分析
今日面試題:迴文分割
對一個字串按照迴文進行分割,例如aba|b|bbabb|a|b|aba就是字串ababbbabbababa的一個迴文分割,每一個字串都是一個迴文。請找到可以分割的最少的字串數。例如:
1. ababbbabbababa最少4個字串,分割三次:a|babbbab|b|ababa
2. 如果字串整體是迴文,則需要0次分割,最少1個字串
==========================================================
刪除字元分析原題刪除字串中的“b”和“ac”,需要滿足如下的條件:
1. 字串只能遍歷一次
2. 不能夠使用額外的空間
例如:
1. acbac ==> ""
2. aaac ==> aa
3. ababac ==> aa
4. bbbbd ==> d
進一步思考:如何處理aaccac呢,需要做哪些改變呢?
分析
首先要明白從字串中刪除某些字元該如何實現,顯而易見我們可以把保留的字元拷貝新的字串中來實現刪除。但是題目要求不能使用額外的空間。那就是將要刪除的字元全部交換到字串的尾部,然後設定一個'\0'表示字串的結尾。
其次,如果要刪除的都是單個字元的字串,就很直接:我們使用i和j兩個變數遍歷字串,i表示不會刪除的字元的位置,j從0開始,只要i所在位置 的字元不是要刪除的字元,就str[j]=str[i](str表示字串),然後j++指向下一個位置。一次遍歷即可,不需要額外申請空間,只需要兩個 變數。
但是,現在刪除的字串中有多個字元的,如:“ac”。那要如何處理呢?這裡介紹一個小技巧:狀態機。這裡,我們有兩個狀態:ONE和TWO。TWO表示,前一個字元時‘a’的狀態,其他的都用ONE表示。還是採用前面所描述的遍歷方法:
1. 如果當前狀態為ONE,則拷貝:str[j]=str[i];但如果當前字元滿足以下兩種狀態的任一個,則不進行拷貝:
1. 當前字元是‘b’,因為我們要刪除b
2. 當前字元是‘a’,我們要考慮下一個字元是c
2. 如果當前狀態為TWO:
1. 當前字元不是‘c’,那麼我們要先拷貝前一個字元‘a’
2. 然後考慮當前字元,如果不是‘b’或者‘a’,則拷貝字元
狀態轉換非常簡單,就是每次都檢查,是前一個字元為‘a’。基本程式碼如下:
下面進一步考慮: 根據上面的演算法,我們考慮aaccac,最終得到ac。ac在題目中要求的也是要刪除的。是否要刪除這個ac,就需要和麵試官進行交流了,無論如何,總是 要考慮這種情況。還是採用上面的演算法,怎麼解決刪除之後還可以刪除的情況?其實非常簡單,只需要做很小的修改,我們在迴圈最後加上這個程式碼即可:
【分析完畢】
本文來自微信:待字閨中,2013-09-19釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 刪除字元;及interleave字串分析字元字串
- 今日面試題:最長迴文子串;及迴文分割分析面試題
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引
- 字串-刪除指定字元字串字元
- 全面學習分割槽表及分割槽索引(16)--增加和刪除索引分割槽索引
- JavaScript 刪除重複字元JavaScript字元
- 刪除LINUX分割槽Linux
- Linux 分割槽刪除Linux
- swap分割槽新增刪除
- JavaScript 刪除字串重複字元JavaScript字串字元
- ORACLE 刪除無用分割槽Oracle
- 【實驗】【PARTITION】RANGE分割槽表刪除分割槽
- JavaScript刪除字串中重複字元JavaScript字串字元
- JavaScript刪除字串中所有指定字元JavaScript字串字元
- JavaScript 刪除字串中所有指定字元JavaScript字串字元
- JavaScript刪除字串中的指定字元JavaScript字串字元
- win10 oem分割槽怎麼刪除_win10 oem分割槽可以刪除嗎Win10
- win10分割槽好了怎麼刪除_win10分割槽完後如何刪除Win10
- python迴圈刪除漏洞Python
- delete_partition.pl 刪除分割槽delete
- 翻譯數字串;及最長迴文子串分析字串
- python如何刪除字串的特殊字元Python字串字元
- 第3章-17 刪除字元 (30分)字元
- JavaScript刪除字串中重複的字元JavaScript字串字元
- js刪除字串的第一個字元JS字串字元
- e語音 【刪除文字右邊字元】字元
- ORACLE刪除-表分割槽和資料Oracle
- 刪除分割槽需要更新全域性索引索引
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- 對刪除分割槽的分割槽表執行TSPITR
- 資料表分割槽分割與刪除歷史資料
- 點選退格鍵刪除整個單詞而不是逐個字元刪除字元
- Python刪除列表中的非字母字元Python字元
- C#刪除字串最後一個字元C#字串字元
- LintCode 1905. 字元刪除 Java字元Java
- windows10分割槽無法刪除怎麼辦_win10系統磁碟刪除分割槽的方法WindowsWin10
- SQL Server表分割槽刪除詳情DSCCSQLServer
- mysql 動態新建以及刪除分割槽表MySql