題意:給出一個由'{' , '}' 組成的字符串,通過改變最少括號的方向使其匹配。
思路:貪心方法:從左向右遍歷,遇到左括號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;
}
}