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