南陽OJ-2 括號配對 (數據結構-棧的應用)

括號配對問題ios

時間限制: 3000 ms  |  內存限制:65535 KB
難度: 3
 
描述
如今,有一行括號序列,請你檢查這行括號是否配對。
 
輸入
第一行輸入一個數N(0<N<=100),表示有N組測試數據。後面的N行輸入多組輸入數據,每組輸入數據都是一個字符串S(S的長度小於10000,且S不是空串),測試數據組數少於5組。數據保證S中只含有"[","]","(",")"四種字符
輸出
每組輸入數據的輸出佔一行,若是該字符串中所含的括號是配對的,則輸出Yes,若是不配對則輸出No
樣例輸入
3
[(])
(])
([[]()])
樣例輸出
No
No
Yes
此題意在考查數據結構-棧的用法。
#include<iostream>
#include<stack>
using namespace std;
int main() {
  int n, m;
  cin >> n;
  while (n--) {
    char str[10005];
    stack<char>s;//定義存儲字符類型數據的棧 。 
    cin >> str;
    for (int i = 0; str[i] != '\0'; i++) {
      if (s.empty()) s.push(str[i]);// 若是棧空,數據直接進棧。 
      else {
        if (s.top() + 1 == str[i] || s.top() + 2 == str[i])//根據括號ASC碼差值判斷是否對應 
          s.pop();//若是str[i]與棧頂的括號對應,則棧頂元素出棧。 
        else //不然str[i]進棧。 
          s.push(str[i]);
      }
    }
    if (s.empty())//字符串處理完後,判斷棧是否爲空 。 
      cout << "Yes" << endl;//棧空則表示全部括號都對應 。 
    else//反之則有括號不對應。 
      cout << "No"  << endl;
  }
}        

  若是有錯誤描述,歡迎指出哈!!!!共同探討一塊兒進步!!!數據結構

相關文章
相關標籤/搜索