完全な括弧文字列定義ルールは、1、空の文字列が完全です.2、sが完全な文字列であれば、(s)も完全である.3、sとtが完全な文字列である場合、それらを接続して形成されたstも完全である.

1454 ワード

完全な括弧文字列定義規則は次のとおりです.
1、空の文字列は完全です.
2、sが完全な文字列であれば、(s)も完全である.
3、sとtが完全な文字列である場合、それらを接続して形成されたstも完全である.
たとえば、「(()()())」、「(()()()」は完全なかっこ文字列であり、「()(」)、「(()(」()および「)」)は不完全なカッコ文字列である.
牛にはカッコ文字列sがあり、任意の位置にカッコをできるだけ少なく追加し、完全なカッコ文字列に変換する必要があります.すみません、牛は少なくとも何個の括弧を追加する必要がありますか?
#include 
#include 
#include 
using namespace std;
int main()
{
    int max_deep = 0;
    stack  count_left , count_right ;
    char s;
    while((s = getchar()) != '
'){ if(s == '('){ count_left.push('('); }else{ if(count_left.empty()){ count_right.push(')'); } else{ count_left.pop(); } } } cout << count_left.size() + count_right.size() << endl; return 0; }

上はちょっと難しい問題です.似たような問題は簡単です.
必要なのは、「()()())」、「(()()」は完全なカッコ文字列であり、不正な文字列やカッコが一致しないという問題はありません.
もしそうなら、コードは小さな変更だけでいいです.
#include 
#include 
using namespace std;
int main()
{
	int max_deep = 0;
	int count_sign = 0;
	char s;
	while ((s = getchar()) != '
'){ if (s == '('){ count_sign++; if (max_deep < count_sign){ max_deep = count_sign; } } else{ count_sign--; } } cout << max_deep << endl; return 0; }