以下の内容はhttps://drken1215.hatenablog.com/entry/2024/09/22/214618より取得しました。


鉄則本 B51 - Bracket (3Q, ★4)

スタックを用いて、かっこの対応をとる問題!

問題概要

対応のとれているカッコ列  S が与えられる。対応する左かっこ '(' と右かっこ ')' が、それぞれ  S の何番目と何番目であるかを順に求めよ。

制約

  •  1 \le |S| \le 2 \times 10^{5}

メモ

詳しい解説はここにあるのでメモ程度に。

github.com

スタックには左カッコ '(' に対応する index を格納していく。')' に対応する '(' の index は、スタックの末尾にある要素を見ていけば良い。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    string S;
    cin >> S;
    vector<int> stk;
    for (int i = 0; i < S.size(); i++) {
        if (S[i] == '(') stk.push_back(i);
        else {
            cout << stk.back()+1 << " " << i+1 << endl;
            stk.pop_back();
        }
    }
}



以上の内容はhttps://drken1215.hatenablog.com/entry/2024/09/22/214618より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14