【2024最新华为OD-C卷试题汇总】字符串分割(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

文章目录

前言

🎀关于华为OD

  • ✨华为OD的概念
    华为的大部分社会招聘采用了被称为OD(Outsourcing Dispatch)模式,这是一种与德科共同进行的招聘方式。在这种模式下,被招聘的员工通常被定级在13至17级,这些员工被视为华为的储备人才。华为每年会从这些OD项目中选拔表现出色的员工,并将他们转为正式员工。
  • ⌚️华为 OD 应聘流程
    • 第一步:投递简历

      • 提供姓名、邮箱、手机号、身份证号,用于锁定,所以投递前需要考虑清楚,投到项目组之后,一般不会转给另一个项目的 HR 了,也就是被锁定。
    • 第二步:机试

      • 3 道算法题,400 分满分,一般 1 个月的准备时间,华为机试必须要 300 分以上,没有过半年之后才能参加下一次考试。
    • 第三步:技术面

      • 2 轮技术面试。
    • 第四步:HR 与主管面试

    • 第五步:录用,发 offer

🧭 机试备考指南

  • 华为OD的题库大半年跟新一次,也就是说,一旦跟新,那么本年用的题目就是从该题库种选题,大概有100~200道左右

  • 最近考试换为C/D卷,C/D卷题库是一样的,D卷为双机位监控,某些外包公司应聘的为D卷。

  • 为此清隆帮大家搜集并整理了C卷的题库,后续会由清隆的ACM银牌团队将题目整理后搬上OJ,支持在线评测

🎧 字符串分割(100分)

问题描述

K小姐最近在研究字符串问题。现在,她有一个只包含大写字母 X X X 和 Y Y Y 的字符串 S S S,且 S S S 中 X X X 和 Y Y Y 的数量相等。这种字符串被称为均衡串。

K小姐想知道, S S S 最多可以被分割成多少个连续的子串,使得每个子串都是一个均衡串。

输入格式

输入一个字符串 S S S,字符串中只包含大写字母 X X X 和 Y Y Y,保证 S S S 是一个均衡串。

输出格式

输出一个整数,表示 S S S 最多可以被分割成的均衡子串数量。

样例输入

复制代码
XXYYXY

样例输出

复制代码
2

数据范围

2 ≤ ∣ S ∣ ≤ 10000 2 \leq |S| \leq 10000 2≤∣S∣≤10000

题解

这道题可以使用贪心的思想来解决。我们可以从左到右扫描字符串,维护当前子串中 X X X 和 Y Y Y 的数量。如果在某个位置,当前子串中 X X X 和 Y Y Y 的数量相等,那么我们就找到了一个均衡子串,可以将其分割出来,然后继续扫描剩余的字符串。

具体实现时,我们可以用一个变量 c n t cnt cnt 来表示当前子串中 X X X 的数量减去 Y Y Y 的数量。如果遇到 X X X,就将 c n t cnt cnt 加 1 1 1,如果遇到 Y Y Y,就将 c n t cnt cnt 减 1 1 1。当 c n t cnt cnt 为 0 0 0 时,说明当前子串是一个均衡串,可以将其分割出来。

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1)。

参考代码

  • Python
python 复制代码
s = input()
cnt = 0
ans = 0
for c in s:
    if c == 'X':
        cnt += 1
    else:
        cnt -= 1
    if cnt == 0:
        ans += 1
print(ans)
  • Java
java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int cnt = 0, ans = 0;
        for (char c : s.toCharArray()) {
            if (c == 'X') {
                cnt++;
            } else {
                cnt--;
            }
            if (cnt == 0) {
                ans++;
            }
        }
        System.out.println(ans);
    }
}
  • Cpp
cpp 复制代码
#include <iostream>
#include <string>

using namespace std;

int main() {
    string s;
    cin >> s;
    int cnt = 0, ans = 0;
    for (char c : s) {
        if (c == 'X') {
            cnt++;
        } else {
            cnt--;
        }
        if (cnt == 0) {
            ans++;
        }
    }
    cout << ans << endl;
    return 0;
}

✅AC代码截图

  • 🍓 目前题目还在整理上传ing,需要抢先体验的联系清隆开通OJ账号,由于维护服务器需要成本💰,所以名额有限(暂不免费啦~)
  • AC代码 python 版本
  • AC代码 java 版本
  • AC代码 cpp 版本
相关推荐
weixin_527550401 分钟前
初级程序员入门指南
javascript·python·算法
乄夜21 分钟前
嵌入式面试高频(5)!!!C++语言(嵌入式八股文,嵌入式面经)
c语言·c++·单片机·嵌入式硬件·物联网·面试·职场和发展
程序员的世界你不懂21 分钟前
Appium+python自动化(十)- 元素定位
python·appium·自动化
CryptoPP1 小时前
使用WebSocket实时获取印度股票数据源(无调用次数限制)实战
后端·python·websocket·网络协议·区块链
树叶@1 小时前
Python数据分析7
开发语言·python
老胖闲聊2 小时前
Python Rio 【图像处理】库简介
开发语言·图像处理·python
小猫咪怎么会有坏心思呢2 小时前
华为OD机考 - 水仙花数 Ⅰ(2025B卷 100分)
数据结构·链表·华为od
码界奇点2 小时前
Python Flask文件处理与异常处理实战指南
开发语言·python·自然语言处理·flask·python3.11
浠寒AI3 小时前
智能体模式篇(上)- 深入 ReAct:LangGraph构建能自主思考与行动的 AI
人工智能·python
乖乖是干饭王3 小时前
Linux系统编程中的_GNU_SOURCE宏
linux·运维·c语言·学习·gnu