2 括號配對問題

2021-07-24 02:34:42 字數 2273 閱讀 4862

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:3 描述

現在,有一行括號序列,請你檢查這行括號是否配對。

輸入第一行輸入乙個數n(0輸出

每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no

樣例輸入

3

[(])

(])([()])

樣例輸出

no

noyes

#include #include using namespace std;

int main()

else

}case ')':

else

}default:break;

}p++;

if(k==1)

break;

} if(0==str2.length()&&k==0) //k=1說明有右括號剩餘

cout << "yes" << endl;

else

cout << "no" << endl;

} return 0;

}

剛換c++,一時沒想到怎麼用棧(其實是資料結構學的還是個半吊子),就寫出這麼乙個玩意

不過,很多東西也是第一次用,就當擴充知識了

建立乙個字串,遇到左括號就寫入,遇到右括號就和字串的最後乙個字元進行判斷,如果有與之相匹配的括號,就從字串最後刪去左括號,否則就做個標記

(因為我的沒有存入右括號,第一次沒做標記,沒有考慮到右括號有剩餘的情況,考慮問題不全面)

p=&str[0]:str是string字串,再加上下標則為char型,char*型別的p才能正確訪問元素

str.length():獲取字串的實際長度,那麼再-1指向的就是最後乙個字元了

str.erase(str.length()-1):刪除字串最後乙個元素

拓展:

語法:

iterator erase( iterator pos );

iterator erase( iterator start, iterator end );

basic_string &erase( size_type index = 0, size_type num = npos );

erase()函式可以:

引數index 和 num 有預設值, 這意味著erase()可以這樣呼叫:只帶有index以刪除index後的所有字元,或者不帶有任何引數以刪除所有字元.

此處使用的是第乙個用法,刪除了指定位置的字元

#include#include#includeusing namespace std;

int main()

{ int n;

cin>>n;

while(n--)

{ vectorvec;

string ch;

vec.push_back(' ');

cin>>ch;

for(int i=0;i

這裡用到了容器,push_back()表示在vector尾部插入乙個元素

看了好久,才醒悟過來這段**沒有一次性輸入完畢在進行判斷,而是邊輸入邊判斷,在中間做了輸出vec.back() - 1,發現輸出的是數字,猜測是ascii碼,最後查了ascii表才略懂判斷條件

開方括號[為93,閉方括號]為91,開圓括號(為40,閉圓括號)為41

vec.back()-1 == *(vec.end()-2)

判斷圓括號是否匹配,而

vec.back()-2 == *(vec.end()-2)

判斷方括號是否匹配

至於

vec.push_back(' ');
的作用,是因為每次需要判斷兩個元素,在只輸入乙個元素的時候,程式會炸裂= =在前面補個空

最後,檢驗猜想,輸入數字12、13,字母ab、ac等,都可判斷為yes,這說明這個程式的核心其實是判斷ascii值之差,差為1或2時為yes,否則為no

括號配對問題 2

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入乙個數n 0輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no 樣例輸入 3 樣例輸出 no noyes includ...

2 括號配對問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入乙個數n 0輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no 樣例輸入 3 樣例輸出 no noyes includ...

2 括號配對問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入乙個數n 0輸出 每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出yes,如果不配對則輸出no 樣例輸入 3 樣例輸出 no noyes include...