【思路】
對於對稱括號這種問題,我們很容易想到用棧解決。
當括號是左括號時,入棧;當括號是右括號時,判斷其是否與棧頂的左括號匹配,是,棧頂元素出棧,繼續判斷下乙個,否,返回false。
【**1】
class
solution':
if((char
)stack.
peek()
=='}else
return
false;}
}if(stack.
empty()
)return
true
;else
return
false;}
}
【**2】
class
solution')
;else
if(stack.
isempty()
|| c != stack.
pop())
return
false;}
return stack.
isempty();}}
【改進】
class
solution
mappairs =
newhashmap
()','}
; deque
stack =
newlinkedlist
();for
(int i =
0; i < n; i++
) stack.
pop();
//否則,出棧
}else
}return stack.
isempty();}}
【總結】**1和**2沒用雜湊表,當時考慮括號只給了3個型別,就直接switch…if了。如果為了使程式可擴充套件性更強的話,應該用官方**:雜湊表。
時間複雜度:o(n),其中 n 是字串 s 的長度。表示時間複雜度和輸入呈線性關係。
空間複雜度:o(n+∣σ∣),其中 σ 表示字符集,本題中字串只包含 6 種括號,∣σ∣=6。棧中的字元數量為 o(n),而雜湊對映使用的空間為 o(∣σ∣),相加即可得到總空間複雜度。
棧和佇列:
stack,deque,queue對比
為什麼使用deque而不使用stack構造棧
建立棧stack stack = new stack();
linkedlist stack = new linkedlist<>();
deque stack = new linkedlist();
入棧stack.push(』]』);
檢視棧頂元素
stack.peek();
返回棧頂元素,並將其出棧
stack.pop();
判斷棧頂是否為空
stack.isempty();
有效的括號(簡單)
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...
LeetCode初級題 有效的括號
有效的括號 題目要求 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 fals...
Leetcode刷題 有效的括號
思路 先把符號輸入字典,每對符號的左半邊設定為位置,右半邊設定為值,方便後續進行比對。利用出入棧的思想,設定棧stack,將字串中的值cpush入棧直至c不在字典裡。然後再將棧裡的值pop出來與c對比,注意此時pop出來的值是字典的位置索引dic stack.pop 所對應的值應該是符號的右半邊。如...