開門見山,假設我們有一大串的由'', '[', ']', '(', ')' 這些括號構成比如像這樣的"][()"符號串,我們肉眼當然能看出它是非法的,那麼如何使用**來判斷是否合法呢?
其實我們可以借助棧來判斷這些符號串是否非法 :
1.首先我們我需要建立符號的一對一對映,如下所示:
1 map mp = ,2.我們對字串進行遍歷', '
, }; //
對映括號
1.如果能通過對映的鍵找到當前字元str[i],我們就從棧頂彈出乙個元素並獲取該元素。當然,如果是棧為空的清空的話,我們就為這個字元隨便賦個值,比如說賦值為 '@',我們假記該變數為top_element。接下來我們看看是否能從當前字元str[i]對映所對應的值與top_element是否相同,若不同,則可以判斷該符號串為非法的。3. 迴圈結束 ,若棧為空則表示當前字串合法,若不為空,則表示當前字串非法2.若果找不到該字元str[i]對映的鍵,則先將其加入棧中。
4. 可能光用語言描述不能只管表達,下面我們來看圖示,假設我們輸入了"()"字串,其具體過程如下:
5. 好了看完圖,接下來我們c++的**來描述一下該過程:
#include #include6. 注意**中map是直接用list初始化的,所以這段**必須在c++11下上的版本中才可以執行。#include
#include
using
namespace
std;
class
solution
, ', '
, }; //
對映括號
for (int i = 0; i < s.size(); i++)
else
}return st.size() == 0; //
如果棧為空則表示合法
}};
好了以上就是這次分享的全部內容了,如有錯誤還望斧正,我們下次見。
判斷括號是否有效
例如 判斷括號是否有效 param str 輸入的字串 return 括號有效的話返回真 public static boolean bracketiseffect string str str str.replace str str.replace return str.isempty 每次遍歷字...
判斷括號是否匹配
日期 2009.6.20 問題 設計乙個演算法,判斷乙個算術表示式中的括號是否配對。算術表示式儲存在帶頭結點的單迴圈鍊錶中,每個結點有兩個域 ch和 link 其中ch 域為字元型別。1 思路 根據括號的特點 進行匹配的時候,第乙個做括號最後乙個匹配,最後乙個左括號與第乙個右括號相匹配,恰好可以使用...
判斷括號是否閉合
匹配的賦值為相反數,使用棧進行判斷,如果匹配 棧頂和當前元素的值為相反數 就出棧,否則入棧,最終看棧是否為空,如果為空,則是對應的,我考慮到的情況有 類似 給定乙個只包括 的字串,判斷是否有效。必須以順序閉合,注意順序,閉合。include using namespace std include c...