糖果;及子串查詢分析
今日面試題:糖果
N個孩子站成一排,每個人分給一個權重。按照如下的規則分配糖果:
1. 每個孩子至少有一個糖果
2. 所分配權重較高的孩子,會比他的鄰居獲得更多的糖果
問題是,最少需要多少個糖果?
==================================================
子串查詢分析
原題
從一個長字串中查詢包含給定字符集合的最短子串。例如,長串為“aaaaaaaaaacbebbbbbdddddddcccccc”,字符集為 {abcd},那麼最短子串是“acbebbbbbd”。如果將條件改為“包含且只包含給定字符集合”,你的演算法和實現又將如何改動。
分析
本期的題目與上期的題目頗類似。上期我們在分析完之後,提到還可以利用hashmap來實現。這樣可以進一步的減小時間複雜度。具體的思路與上期的方法也類似,只是在判斷是否出現的時候,不是採用排序的方法,而是hashmap的方法。具體方法如下:
1. 遍歷一邊字符集合,將集合中的字元都加到hashmap中
2. 然後遍歷長串,記錄遍歷開始pBegin和結束pEnd的位置,直到hashmap中的字元都出現過,則不斷移動pBegin,檢視是否能夠滿足 所有字符集和中的字元都出現了,如果出現:則不斷更新最小長度;如果沒有出現,則停止移動pBegin,開始移動pEnd。依次類推,像一個可以伸縮的窗 口在長串上遍歷。
示例程式碼如下:
這個程式碼是《程式設計之美》中求解最短摘要的程式碼,其實本題,也是最短摘要的一個變化,字符集和就相當於查詢了。
這裡有一個小小的技巧,在移動pBegin的時候,怎麼判斷是否字符集合中的字元都出現了呢?可以採用給另外一個hashmap用來記錄字符集中字 符出現的次數,當pBegin指向的字元,出現在hashmap中,則其對應出現次數減1,如果次數為0了,則要停止pBegin,開始移動pEnd。
這個方法的時間複雜度為O(2*n + m),空間複雜度為O(n)。
【分析完畢】
本文來自微信:待字閨中,2013-10-04釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 子串查詢;及排列子串分析
- 子串查詢
- 查詢子串
- #103. 子串查詢
- 子串查詢函式strstr函式
- Python小技巧 - 子串查詢Python
- BMH子串查詢演算法(PHP實現)演算法PHP
- 子查詢-表子查詢
- 翻譯數字串;及最長迴文子串分析字串
- 拷貝連結串列;及糖果分析
- 複雜查詢—子查詢
- SQL查詢的:子查詢和多表查詢SQL
- 慢查詢最佳化及分析
- mongodb索引及查詢優化分析MongoDB索引優化
- 查詢提示;及重排陣列分析陣列
- 字母表;及查詢提示分析
- 相關子查詢&非相關子查詢概念
- MySQL子查詢MySql
- 使用子查詢
- MYsql 子查詢MySql
- oracle子查詢Oracle
- 子查詢分解
- 11子查詢
- sql子查詢SQL
- informix子查詢ORM
- MySQL聯結查詢和子查詢MySql
- select查詢之三:子查詢
- 今日面試題:最長迴文子串;及迴文分割分析面試題
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- 區分關聯子查詢和非關聯子查詢
- sql語法相關子查詢與非相關子查詢SQL
- exist-in和關聯子查詢-非關聯子查詢
- MySQL之連線查詢和子查詢MySql
- 巢狀子查詢巢狀
- GORM subquery 子查詢GoORM
- SQL--子查詢SQL
- Oracle with重用子查詢Oracle
- oracle with 子查詢用法Oracle