针对一个括号串,有如下两种序列
1.p序列:当出现匹配括号对时,从该括号对的右括号开始往左数,直到最前面的左括号数,就是pi的值。
2.w序列:当出现匹配括号对是,包含在该括号对中的所有括号对数(包括该括号对),就是wi的值。
给出数字串p,求s串。
代码如下:
#include <iostream>
using namespace std;
int main()
{
int state[80];
int num;
cin>>num;
for(int i = 0;i < num; i++)
{
int length;
cin >> length;
int pt = 0;
int k; int lastk = 0;
for(int j = 0; j < length; j++)
{
cin >> k;
int step = k - lastk;
lastk = k;
while(step > 0)
{
state[pt++] = 2; //未被搜索的左括号
step--;
}
state[pt++] = -2; //未被搜索的右括号
}
for(int j = 0; j < pt; j++)
{
if(state[j] == -2)
{
int tempPt = j;
int tempNum = 0;
while(tempPt >= 0)
{
if(state[tempPt] == 1 ) //包含了一个括号对
{
tempNum++;
}
else if(state[tempPt] == 2)
{
state[tempPt] = 1; //找到匹配括号,同时将匹配的左括号置为1
tempNum++;
break;
}
tempPt--;
}
cout << tempNum << " ";
}
}
cout << endl;
}
return 0;
}