题目翻译
一个 01 串,找到一个它的子串,1 的个数多删所有 0,0 的个数多删所有 1。问最多删几个数。
题目思路
首先统计 01 个数是必须的。
之后,分类讨论 3 种情况。
情况1:0 的个数比 1 多。
输出 1 的个数。
情况2:1 的个数比 0 多。
输出 0 的个数。
情况 3:1 的个数和 0 的个数相等。
这里有个小问题。
有人可能问,一样不是输出 $0$ 吗?
但是,重新审题。找到一个它的子串,这里划重点。
也就是说,不用看整个字符串。
那么我们少拿一个 0 或少拿一个 1,答案就更多了。
所以,输出 0 的个数 -1。
题目代码
void solve()
{
string s;
cin>>s;
int cnt0=0,cnt1=0;
for(int i=0;i<s.size();i++)//记录01个数
{
if(s[i]=='1')cnt1++;
else cnt0++;
}
if(cnt0==cnt1)cout<<cnt0-1<<endl;//分类讨论
else cout<<min(cnt0,cnt1)<<endl;
}
多组数据,代码未全。请勿copy,当心踩坑!