0和1最少反转

class Solution{
private:
	int n;

public:
	int getLesser(string &str){
		n=str.size();
		//如果字符串为空,或者本身是纯色,直接返回0
		if(n==0||str.find('r')==-1||str.find('b')==-1) return 0;
		//如果是杂色,只有两种情况
		//第一种情况是前面是r,后面全是b,r不能在b前面
		//第二种情况是前面全是b,后面全是r,b不能在r前面
		return min(getAns('r','b'),getAns('b','r'));
		
	}
	/**************************************************
	/*第一个参数是指前面的颜色
	/*第二个参数是指后面的颜色
	***************************************************/
	int getAns(string &str,char a,char b){
		//na表示以a这个颜色做结尾要反转的次数
		int na=0;
		//nb表述以b这个颜色做结尾要反转的次数
		int nb=0;
		for(int i=0;i<n;i++){
			if(str[i]==a)  nb=min(na,nb)+1;
			else{
				nb=min(na,nb);
				na++;
			}
		}
		return min(na,nb);
	}
}

  

posted on 2022-07-29 17:10  4小旧  阅读(33)  评论(0)    收藏  举报

导航