南通六建網(wǎng)站在線推廣
文章目錄
- 1.表達(dá)式括號(hào)匹配(stack)
- 2.括弧匹配檢驗(yàn)(check)
- 3.字符串匹配問題(strs)
- 4.括號(hào)匹配(bracket)
- 5.總結(jié)
1.表達(dá)式括號(hào)匹配(stack)
P a r t Part Part 1 1 1 讀題
題目描述
假設(shè)一個(gè)表達(dá)式有英文字母(小寫)、運(yùn)算符( + + +, — — —, × \times ×, ÷ ÷ ÷)和左右?。▓A)括號(hào)構(gòu)成,以“ @ @ @”作為表達(dá)式的結(jié)束符。
請(qǐng)編寫一個(gè)程序檢查表達(dá)式中的左右圓括號(hào)是否匹配,若匹配,則返回“ Y E S YES YES”;否則返回“ N O NO NO”。表達(dá)式長(zhǎng)度小于 255 255 255,左圓括號(hào)少于 20 20 20個(gè)。
輸入格式
包括一行數(shù)據(jù),即表達(dá)式
輸出格式
包括一行,即“ Y E S YES YES” 或“ N O NO NO”。
輸入樣例1
2*(x+y)/(1-x)@
輸出樣例1
YES
輸入樣例2
(25+x)*(a*(a+b+b)@
輸出樣例2
NO
數(shù)據(jù)范圍與提示
表達(dá)式 S S S的長(zhǎng)度 ≤ 225 ≤225 ≤225
P a r t Part Part 2 2 2 思路
根據(jù)題意,我們知道了本題需要我們?cè)谳斎牒?,找到字符串中? ( ( (“和” ) ) )“,然后進(jìn)行計(jì)算,把” ( ( (“放入棧中,每當(dāng)出現(xiàn)一個(gè)” ) ) )",就把棧頂減一,遇到結(jié)尾的 @ @ @后,截止運(yùn)算,判斷棧頂是否為 0 0 0,輸出 Y E S YES YES或 N O NO NO
小tip:大家可以先根據(jù)思路,寫一下代碼哦!
P a r t Part Part 3 3 3 代碼
#include<bits/stdc++.h>
using namespace std;
int top;
int main(){string a; char s[3000];cin>>a;int n=a.size();for(int i=0;i<n;i++){if(a[i]=='(')s[++top]=1;if(a[i]==')'){if(s[top]==1&&top>0)s[--top]=0;else{cout<<"NO";break;}}if(a[i]=='@'){if(top==0)cout<<"YES";else cout<<"NO";}}return 0;
}
2.括弧匹配檢驗(yàn)(check)
P a r t Part Part 1 1 1 讀題
題目描述
假設(shè)表達(dá)式中允許包含兩種括號(hào):圓括號(hào)和方括號(hào),其嵌套的順序隨意,如 ( [ ] ( ) ) ([]()) ([]())或 [ ( [ ] [ ] ) ] [([][])] [([][])]等為正確的匹配, [ ( ] ) [(]) [(])或 ( [ ] ( ) ([]() ([]()或 ( ( ) ) ) ) (()))) (())))均為錯(cuò)誤的匹配。
現(xiàn)在的問題是,要求檢驗(yàn)一個(gè)給定表達(dá)式中的括弧是否正確匹配?
輸入一個(gè)只包含圓括號(hào)和方括號(hào)的字符串,判斷字符串中的括號(hào)是否匹配,匹配就輸出“ O K OK OK” ,不匹配就輸出“ W r o n g Wrong Wrong”。
輸入格式
輸入僅一行字符(字符個(gè)數(shù) < 255 <255 <255)
輸出格式
匹配就輸出 “ O K OK OK” ,不匹配就輸出“ W r o n g Wrong Wrong”。
輸入樣例
[(])
輸出樣例
Wrong
數(shù)據(jù)范圍與提示
字符個(gè)數(shù) n < 255 n<255 n<255
P a r t Part Part 2 2 2 思路
看到題目,大家可能認(rèn)為與題目1相類似,僅僅是多了一個(gè) [ ] [] [],但是嘗試后發(fā)現(xiàn)并沒有想象中的那么簡(jiǎn)單,所以我們舉例分析:
字符 n n n: ( [ ) ] ([)] ([)]
下標(biāo) i i i: 0123 0123 0123
若 s [ i ] s[i] s[i]是“ ( ( (”或是“ [ [ [”就無條件進(jìn)入棧 a a a,將棧 a a a下標(biāo) + + t o p ++top