這題有點懵逼的,一開始沒什麼思路,然後大致讀懂了題意之後,腦子裡又變得很亂,各種時間複雜度很高的演算法都涌了出來,其實都沒什麼用。然後看到了這個題屬於雙指針和貪心,似乎給了我一點提示。藉助一個字典來存儲每個字母最後出現的索引,採用start和end雙指針切割的思想,一旦end指針達到切割點便將數組切割,然後更新start節點以便下一次循環遍歷得到。代碼如下
這題復盤的時候,我在想怎麼自己第一遍就不會想到這個思路呢,這題的關鍵無非就是了解題意之後。自己之前想用count來直接計數,然後發現邊界條件很難寫好,語句也不是很容易讀,多了很多ifelse判斷,但是用雙指針以擴充範圍的思想來看,就立馬寫的很順了。
這是一道用棧來實現隊列的問題,作為兩種比較基本的數據結構,棧的特性是後進先出(LIFO),隊列的特性是先進先出(FIFO)。因此這道題要實現的操作中,主要就是要實現push和pop不同數據結構之間的操作轉化。
這裡區別最大的一點就是push操作,堆棧只能放在頂部,因此pop時會出錯,於是我們需要將push的元素放到頭部,這樣就和隊列的數據結構保持一致了。這裡藉助另一個數組來實現這個功能,參考圖: