题解 | 小红的01串

小红的01串

https://www.nowcoder.com/practice/8920f77fb2c0409a9f4f9025969110de

#include <iostream>
using namespace std;
using ll = long long;

int main() {
    ll q;
    cin >> q;
    // 步骤1:处理多组测试用例(q组查询)
    while (q--) {
        string s;
        cin >> s; // 读取每组的二进制字符串

        // 步骤2:处理边界情况——字符串长度为1
        // 算法思想:长度为1时,不存在长度为2的连续子串,无法进行任何翻转操作
        // 此时字符串本身就满足"所有字符相同"的条件,直接返回"Yes"
        if (s.size() == 1) {
            cout << "Yes" << endl;
            continue;  // 跳过后续逻辑,处理下一组测试用例
        }

        // 步骤3:核心统计——统计字符串中'1'的总个数
        // 算法思想:基于"1的个数奇偶性不变"的核心规律,'1'的个数是后续判断的关键数据
        ll cnt1 = 0;
        for (auto t : s) {
            if (t == '1') {
                cnt1++;  // 遍历字符串,每遇到一个'1'就累加计数器
            }
        }

        // 步骤4:核心判断——基于奇偶性规律,判断两个目标状态是否有其一可行
        // 算法思想:抓住"初始1的个数奇偶性"与"目标状态奇偶性"匹配的核心
        // 条件1 (cnt1%2==0):判断能否转为全0(全0状态1的个数为0,是偶数,匹配初始1的个数偶数即可)
        // 条件2 (cnt1%2==s.size()%2):判断能否转为全1(全1状态1的个数为字符串长度s.size(),匹配两者奇偶性一致即可)
        // 两个条件满足其一,即说明可以实现"所有字符相同"的目标,返回"Yes"
        if (cnt1 % 2 == 0 || cnt1 % 2 == s.size() % 2) {
            cout << "Yes" << endl;
        }
        // 步骤5:返回不可行结果——两个目标状态均无法满足,返回"No"
        else {
            cout << "No" << endl;
        }
    }
    return 0;
}

全部评论

相关推荐

昨天 10:23
已编辑
湖南师范大学 计调
太久没更新,前几天看到一条评论,说“牛客就是当年那群做题区毕业了开始找工作还收不住那股味”的群体。字里行间透着居高临下的评判,不是,他该不会以为自己很幽默?很犀利吧?作为在牛客混了不算短日子的用户,我感到的不只是被冒犯,更是一种深刻的悲哀——这种以“松弛感”为名,对另一种生存策略的轻蔑,颇有一种自己考不上大学早早出来混社会,嘲笑考上大学的人是书呆子,然后大言不惭地说:死读书有什么用,人脉和资源才是硬道理。我不知道说这个话的人,手头究竟握着多少真正管用的人脉与资源,也不知道他这么傲慢地说出“那股味”的时候,是站在哪一个巨人的肩膀上,才能如此“松弛从容”地俯视众生,还能品评出别人身上“没收住”的余...
淬月星辉:这种评论把正常的努力扭曲成卷😂,说白了就是自己不努力,看着身边努力的人一个个都事业有成了,自己的心里开始不平衡了,就发这种酸言酸语。牛客可以说是我用过那么多平台里社区氛围最好的论坛了,用了大半年了,基本上没见过有人吵架的,都是在互帮互助提建议,帮忙看简历的,帮忙选offer的,帮忙指点学习路线的,分享工作经验和趣事的,我觉得这才是互联网该有的样子。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务