一、棧匹配
思路:借助棧來實現括號的匹配,如果碰到的是三種左括號的話,將左括號進行入棧,以為需要匹配到括號肯定都是右括號於左括號進行匹配的,所以遇到左括號直接入棧就可以了。如果遇到右括號,需要進行匹配,如果目前棧中為空的話,直接返回false,因為這個括號很明顯的多出來了。如果不為空,將棧中的乙個元素出棧,為了方便,直接進行三個字串的匹配,如下:
boolean b1 = c ==
')'&& cstack !=
'(';
boolean b2 = c ==
']'&& cstack !=
'[';
boolean b3 = c ==
'}'&& cstack !=
'
返回為false。每次輸入乙個字元匹配的時候,因為如果是匹配不上的話肯定返回false了,如果有乙個匹配上,那麼這三個都會為false。(這個地方大家自己debug一下比較的清楚,表達的不是太好)。如果最終棧為空的話 那麼就是匹配成功的
完整**如下:
/**
* 思路
* 將字串當做為乙個每乙個字元來處理,如果為左括號就進行入棧,如果是右括號就將乙個元素出棧
* 然後進行對應括號的匹配
* @param s
* @return
*/public static boolean isvalid
(string s)
else
char cstack = stack.
pop();
boolean b1 = c ==
')'&& cstack !=
'(';
boolean b2 = c ==
']'&& cstack !=
'[';
boolean b3 = c ==
'}'&& cstack !='}
}return stack.
isempty()
;}
如有錯誤,歡迎指正!!!
參考:cs-notes
用棧實現括號匹配
假設只允許出現兩種括號 圓括號和方括號,其巢狀順序隨意,即不管 或 等都為正確匹配,但是形如 就成為錯誤的匹配。可以用 期待的緊急程度 的概念來描述 如 共8個括號,從左往右依次標代號為1 8,即第乙個 代號為1,第二個 代號為2,第三個 代號為3,依次類推 當計算機收到了第乙個括號後,期待它與第八...
用棧實現括號匹配
構造棧函式並用棧實現括號匹配 以下 include include include 建立乙個棧,用棧求出二進位制轉十進位制,轉八進位制,銷毀,清空,push,pop 用棧來求逆波蘭演算法 用字元來轉成雙精度變數 用棧來檢驗括號是否正確 建立乙個鍊錶棧,並具有插入,刪除操作 define initnu...
括號匹配問題 棧實現佇列
在對棧的學習時,見到了兩個棧的應用場景,乙個是括號匹配問題,乙個是用棧來實現佇列。括號匹配問題的解決 首先基於棧的基礎上,實現括號匹配問題,要使用到棧的基本操作,入棧,獲取棧頂元素,出棧等。首先,先將左括號入棧,然後進行括號匹配,如果匹配成功,則讓已經匹配成功的左括號出棧,繼續進行匹配,直到外部的括...