LeetCode初級題 有效的括號

2021-09-11 19:26:12 字數 1670 閱讀 1090

有效的括號

題目要求:

給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串,判斷字串是否有效。

有效字串需滿足:

左括號必須用相同型別的右括號閉合。

左括號必須以正確的順序閉合。

注意空字串可被認為是有效字串。

示例 1:

輸入: 「()」

輸出: true

示例 2:

輸入: 「(){}」

輸出: true

示例 3:

輸入: 「(]」

輸出: false

示例 4:

輸入: 「([)]」

輸出: false

示例 5:

輸入: 「」

輸出: true

class solutions', '//建構函式,建立鍵值對應

public boolean isvalid(string s) else if (map.containskey(c)) else

// system.out.println("2");

if(pop == map.get(c)) else

}i++;

} return stack.isempty();//判斷最後棧是不是空

}}

問題解析:

假如第乙個字元是閉括號,那麼這個字串就不符合條件,之後就直接返回false,比如"))))(((("

假如第乙個字元是開括號,那麼我們記下來,然後記錄開括號個數left++,當我們第一次遇到閉括號的時候,判斷能不能和前面最後一次記錄的開括號匹配 ,如果不能匹配的話,就返回false,比如:「({)」。如果能匹配的話就消去這兩個括號,計數器left–,最後如果這個left是0的時候,說明字串裡面的括號都是配對的,條件成立,返回true。

計數器還好說,但是我們怎麼記錄相應的括號呢?

使用list?那我們怎麼知道最後乙個開括號是什麼呢?因為list裡面的東西是亂的呀。

使用char字元陣列嗎?好像是可以操作的(好像可以試試),但是肯定不是最好的,因為每一次都要記錄最後乙個開括號的位置,應該會很麻煩。

當找到開括號的時候,需要記錄,在找到配對的閉括號的時候還要刪除,之後還能找到前乙個記錄的字元,那麼就理所當然想到使用棧來解決問題。

(1)首先,當找到乙個開括號的時候,壓入棧。

(2)之後,找到乙個和棧頂元素(最後一次記錄的開括號)配對的閉括號就在棧中把棧頂元素取出來,這個時候如果閉括號和棧頂元素不配對的時候,說明這個括號的組就不符合條件,直接返回false。

(3)最後只要判斷這個棧是不是空。當不是空則返回false(沒配對成功),是空返回true(都能配對)。

這個問題就和連連看一樣,找到兩個成對兒消掉就行,但是要按照順序配對消除。

關於stack(棧)的複習

peek()——返回棧頂元素但是不取出棧頂元素

push(type t)和add(type t)——將指定型別的資料加入棧

empty()——判斷棧是不是空的

pop()——取出棧頂元素

依然是請大家指出不對的地方,對我的進步可是有很多大作用的呦。

leetcode20 python有效的括號

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...

python leetcode 20 有效的括號

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...

Leetcode刷題 有效的括號

思路 先把符號輸入字典,每對符號的左半邊設定為位置,右半邊設定為值,方便後續進行比對。利用出入棧的思想,設定棧stack,將字串中的值cpush入棧直至c不在字典裡。然後再將棧裡的值pop出來與c對比,注意此時pop出來的值是字典的位置索引dic stack.pop 所對應的值應該是符號的右半邊。如...