题目翻译

一个 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,当心踩坑!

最后修改:2023 年 04 月 22 日
v我50吃疯狂星期四