1. 程式人生 > 其它 >Linux下如何檢視版本資訊

Linux下如何檢視版本資訊

判斷括號的有效性可以使用「棧」這一資料結構來解決。

我們遍歷給定的字串 ss。當我們遇到一個左括號時,我們會期望在後續的遍歷中,有一個相同型別的右括號將其閉合。由於後遇到的左括號要先閉合,因此我們可以將這個左括號放入棧頂。

當我們遇到一個右括號時,我們需要將一個相同型別的左括號閉合。此時,我們可以取出棧頂的左括號並判斷它們是否是相同型別的括號。如果不是相同的型別,或者棧中並沒有左括號,那麼字串 ss 無效,返回 \text{False}False。為了快速判斷括號的型別,我們可以使用雜湊表儲存每一種括號。雜湊表的鍵為右括號,值為相同型別的左括號。

在遍歷結束後,如果棧中沒有左括號,說明我們將字串 ss 中的所有左括號閉合,返回 \text{True}True,否則返回 \text{False}False。

注意到有效字串的長度一定為偶數,因此如果字串的長度為奇數,我們可以直接返回 \text{False}False,省去後續的遍歷判斷過程。

public boolean isValid(String s) {
int n = s.length();
if (n % 2 == 1) {
return false;
}

Map<Character, Character> pairs = new HashMap<Character, Character>() {{
put(')', '(');
put(']', '[');
put('}', '{');
}};
Deque<Character> stack = new LinkedList<Character>();
for (int i = 0; i < n; i++) {
char ch = s.charAt(i); //( )
if (pairs.containsKey(ch)) { //map.
if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {//為空 棧頂是否對應
return false;
}
stack.pop();
} else {
stack.push(ch);
}
}
return stack.isEmpty();
}