hdu 3351

2014-11-23 20:25:25 · 作者: · 浏览: 6

题意:给出一个由'{' , '}' 组成的字符串,通过改变最少括号的方向使其匹配。

思路:贪心方法:从左向右遍历,遇到左括号lef++,遇到右括号,若lef>0,lef--,否则右括号变为左括号,ans++,lef++,最后再加上多下来的左括号,即lef/2。


代码如下:

 * 3351_2.cpp 
 * 
 *  Created on: 2013年8月7日 
 *      Author: Administrator 
 */  
  
  
  
  
#include    
  
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<