【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 版本
相关推荐
曙曙学编程9 分钟前
stm32——GPIO
c语言·c++·stm32·单片机·嵌入式硬件
你知道网上冲浪吗17 分钟前
【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
python·算法·数学建模·数值分析
钢铁男儿21 分钟前
Python 正则表达式核心元字符全解析
python
杨荧1 小时前
基于Python的宠物服务管理系统 Python+Django+Vue.js
大数据·前端·vue.js·爬虫·python·信息可视化
CodeCraft Studio1 小时前
在 Python 中操作 Excel 文件的高效方案 —— Aspose.Cells for Python
python·ui·excel·报表·aspose·aspose.cells
l1t1 小时前
利用DeepSeek辅助WPS电子表格ET格式分析
人工智能·python·wps·插件·duckdb
WSSWWWSSW2 小时前
Matplotlib数据可视化实战:Matplotlib子图布局与管理入门
python·信息可视化·matplotlib
WSSWWWSSW2 小时前
Matplotlib数据可视化实战:Matplotlib图表美化与进阶教程
python·信息可视化·matplotlib
mftang2 小时前
Python可视化工具-Bokeh:动态显示数据
开发语言·python
Seeklike2 小时前
diffuxers学习--AutoPipeline
人工智能·python·stable diffusion·diffusers