一、今日學習目標
今天學習Stack(堆疊)的概念,並了解LIFO(Last In, First Out,後進先出)的特性,以及如何運用Stack處理具有階層或對稱關係的字串配對問題。
二、題目介紹
LeetCode 20: Valid Parentheses
給定一個僅包含字元 '(', ')', '{', '}', '[' 和 ']' 的字串 s,判斷該字串是否有效。
有效字串需滿足以下條件:
範例輸入:s = "()[]{}"
範例輸出:true
三、解題思路
由於括號必須按照「後開啟的括號要先閉合」的順序配對,這正好符合Stack LIFO(後進先出)的特性。
解題步驟如下:
'(', '{', '['):將其壓入(Push)Stack中。')', '}', ']'):
false。false。true。false。四、Java實作

五、Python實作

六、時間與空間複雜度
Java:
Time Complexity:O(n)
Space Complexity:O(n)
Python:
Time Complexity:O(n)
Space Complexity:O(n)
七、Java 與 Python 解法比較
Deque<Character>搭配ArrayDeque實作Stack,透過push()與pop()操作資料。List實作Stack,透過append()加入元素,以及pop()移除最後一個元素。Deque提供push()、pop()、peek()等Stack常用操作。append()和pop()簡單模擬Stack,因此程式碼較為簡潔。Deque<Character>。八、實作結果
LeetCode測試結果:Accepted
九、今日學習心得
今天學習到Stack(堆疊)的基本概念,以及LIFO(Last In, First Out)的特性。
透過Valid Parentheses這道題目,可以了解到Stack很適合處理具有「先進後出」特性的問題。遇到左括號時先存入Stack,遇到右括號時再取出最後一個加入的左括號進行配對。
這次實作也讓我了解到,雖然Java與Python都可以使用Stack解決相同問題,但兩種語言的資料結構操作方式不同。Java可以使用Deque搭配ArrayDeque,而Python則可以直接使用List搭配append()和pop()。
透過Java與Python的實際比較,我更加了解Stack的運作方式,也體會到選擇適合的資料結構可以讓程式的邏輯更加清楚。