题意:给出一个由'{' , '}' 组成的字符串,通过改变最少括号的方向使其匹配。
思路:贪心方法:从左向右遍历,遇到左括号lef++,遇到右括号,若lef>0,lef--,否则右括号变为左括号,ans++,lef++,最后再加上多下来的左括号,即lef/2。
代码如下:
/* * 3351_2.cpp * * Created on: 2013年8月7日 * Author: Administrator */ #include <iostream> using namespace std; int main(){ string str; int lef; int ans; int count = 1; while( cin >> str,str[0]!= '-' ){ lef = 0,ans =0; for(int i = 0 ; i < str.length() ; ++i ){ if(str[i] == '{'){//如果是左括号 lef++; }else if(lef > 0 ){//如果是右括号且左括号的数量>0 --lef; }else{//如果是右括号且左括号的数量<=0 //是右括号转向成左括号 ans++; lef++; } } cout<<count++<<". "<<(ans+lef/2)<<endl; } }