ZeroJudge K621: [紅]括號匹配問題

題目敘述

每筆測資有一個字串,字串中只會有小括弧和中括弧。要求輸出這個字串有沒有括號匹配問題。


範例輸入 #1

[([][])]

範例輸出 #1

Right


範例輸入 #2

[(])

範例輸出 #2

Wrong


解題思路

跑字串的For迴圈,如果是左括號的話將這個字元存放到一個Vector中,如果是右括號的話判斷目前Vector最後一個字元是否跟這個右括號匹配,如果匹配的話就將Vector最後一個資料Pop_Back,如果不匹配的話直接輸出Wrong並將迴圈Break掉。如果For迴圈跑完Vector中還有資料的話也是Wrong。

解題程式碼如下 (僅供參考):

#include <iostream>
#include <vector>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    string str;
    cin >> str;
    vector<char>v;
    bool ok = true;
    for (int i = 0; i<str.length(); i++)
    {
        if (str[i] == '(' || str[i] == '[')
        {
            v.push_back(str[i]);
        }
        else
        {
            if (str[i] == ')')
            {
                if (v.size() > 0 && v[int(v.size()-1)] == '(') v.pop_back();
                else
                {
                    ok = false;
                    cout << "Wrong\n";
                    break;
                }
            }
            else
            {
                if (v.size() > 0 && v[int(v.size()-1)] == '[') v.pop_back();
                else
                {
                    ok = false;
                    cout << "Wrong\n";
                    break;
                }
            }
        }
    }
    if (ok && v.size() != 0)
    {
        ok = false;
        cout << "Wrong\n";
    }
    if (ok) cout << "Right\n";
}

留言