题目解析
题意
每行字符串满足平稳条件(括号匹配)需要转变的方向的最小次数。当输入’-‘符号(一个或多个)时程序结束。
思路
将输入的字符计数:
遇到’{‘:
l++;
遇到’}’:
若l>0:l–;
若l<=0:l++,res++(}变成{);
res+l/2即为所求。
代码
#include<stdio.h>
#include<algorithm>
using namespace std;
#define M 2004
char a[M];
int main(){
//freopen("data.txt","r",stdin);
int cas=0;
while(~scanf("%s",a),a[0]!='-'){
int i,l=0,res=0;//l表示'{'的计数,res表示'}'变成'{'的计数
for(i=0;a[i]!='\0';i++){
if(a[i]=='{')
l++;
else if(l>0){//遇到}并且l>0
l--;
}else{//遇到}并且l<=0
l++;res++;//}变成{
}
}
printf("%d. %d\n",++cas,res+l/2);//l/2是多出来(没有}与之匹配)的{有一半要转变为}
}
return 0;
}