PIPIOJ 1036:ブラケットマッチング

トピックリンク:
ポータル

タイトルの説明:
PIPIは、有効な角かっこシーケンスを提供します。左角かっこ下付き文字の昇順で、シーケンス内の角かっこの各ペアの添え字を表示したいと思います。(添え字は1から始まります)

入力:
複数のデータセット
最初の行には、「( '、')」のみを含む文字列が含まれています。入力した角かっこ一致シーケンスが正当であり、長さが100000を超えていないことを確認してください。

出力:
シーケンス内の括弧の各ペアインデックスは、左括弧のインデックスの昇順で示されます。

サンプル入力:
(())()()

サンプル出力:
1 4
2 3
5 6
7 8

ヒント:
出力の順序に注意してください〜

問題の落とし穴:
ここに画像の説明を挿入
もう1つ(。

C ++参照コード:

#include <cstdio>
#include <stack>
#include <string>
#include <cstring>

using namespace std;

struct pos{
    
    
	int left;
	int right;
};

char a[100100];

int main()
{
    
    
	pos temp1,temp2;
	
	stack<pos>s1;
	stack<int>s2;
	
	while(scanf("%s",a)!=EOF)
{
    
    
	  for(int i=strlen(a)-1;i>=0;i--)
	{
    
    
		if(a[i]==')')
		 s2.push(i+1);
		else if(!s2.empty())//有一组数据多出了一个(,不然运行错误33%。
		{
    
    
			temp1.right=s2.top();
			temp1.left=i+1;
			s1.push(temp1);
			s2.pop();
		}
	}
	
	int j=s1.size();
	
	for(int i=0;i<j;i++)
	{
    
    
	    temp2=s1.top();
	    printf("%d %d\n",temp2.left,temp2.right);
		s1.pop();
	}
}
	
	return 0;
}

おすすめ

転載: blog.csdn.net/qq_46139801/article/details/115276974