news 2026/6/13 11:14:08

华为OD机试真题 -【分割均衡字符串】 (C++ Python JAVA JS GO)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD机试真题 -【分割均衡字符串】 (C++ Python JAVA JS GO)

分割均衡字符串

2025华为OD机试 - 华为OD上机考试 100分题型

华为OD机试真题目录点击查看: 华为OD机试真题题库目录|机考题库 + 算法考点详解

题目描述

均衡串定义:字符串中只包含两种字符,且这两种字符的个数相同。

给定一个均衡字符串,请给出可分割成新的均衡子串的最大个数。

约定:字符串中只包含大写的 X 和 Y 两种字符。

输入描述

输入一个均衡串。

  • 字符串的长度:[2, 10000]。
  • 给定的字符串均为均衡字符串

输出描述

输出可分割成新的均衡子串的最大个数。

备注

分割后的子串,是原字符串的连续子串

用例1

输入

XXYYXY

输出

2

说明

XXYYXY可分割为2个均衡子串,分别为:XXYY、XY

题解

思路:逻辑分析

  1. 题目保证输入的是均衡字符串并且要求分割之后均衡字符串最大,需要分析出一个原理一个均衡字符串,左边是均衡字符串的情况下,右边部分肯定也是均衡字符串
  2. 明白1的原理之后,只需要从前往后遍历输入字符串,当X的数量 == Y的数量进行一次切割,均衡子串结果+1.
  3. 然后输出得到的切割次数即可。

c++

#include<iostream> #include<vector> #include<string> #include <utility> #include <sstream> #include<algorithm> #include<cmath> #include<map> using namespace std; int main() { string input; getline(cin, input); int res = 0; // 记录xy分别出现次数 vector<int> count(2, 0); for (int i = 0; i < input.size(); i++) { char c = input[i]; count[c - 'X']++; // 达到均衡可以切割一次 if (count[0] == count[1]) { res++; } } cout << res; return 0; }

JAVA

import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); int res = 0; // 记录 X、Y 分别出现的次数,下标 0 表示 X,1 表示 Y int[] count = new int[2]; for (int i = 0; i < input.length(); i++) { char c = input.charAt(i); count[c - 'X']++; // 达到均衡(X 和 Y 数量相等)即可切割一次 if (count[0] == count[1]) { res++; } } System.out.println(res); } }

Python

importsys input_str=sys.stdin.readline().strip()res=0# 记录 X、Y 分别出现的次数count=[0,0]forcininput_str:count[ord(c)-ord('X')]+=1# 达到均衡可以切割一次ifcount[0]==count[1]:res+=1print(res)

JavaScript

// 使用 readline 读取标准输入(ACM 模式)constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout});letinput='';rl.on('line',line=>{input=line.trim();});rl.on('close',()=>{letres=0;// 记录 X、Y 分别出现的次数letcount=[0,0];for(constcofinput){count[c.charCodeAt(0)-'X'.charCodeAt(0)]++;// 达到均衡可以切割一次if(count[0]===count[1]){res++;}}console.log(res);});

Go

packagemainimport("bufio""fmt""os")funcmain(){in:=bufio.NewReader(os.Stdin)varinputstringfmt.Fscanln(in,&input)res:=0// 记录 X、Y 分别出现的次数count:=make([]int,2)fori:=0;i<len(input);i++{c:=input[i]count[c-'X']++// 达到均衡可以切割一次ifcount[0]==count[1]{res++}}fmt.Println(res)}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 3:06:56

多模态突破:AI规模化应用的关键密码

2025年末的AI行业&#xff0c;正上演一场以多模态为核心的竞速赛。从豆包1.8实现视频理解能力的跨越式升级&#xff0c;到谷歌Gemini3强化跨模态交互&#xff0c;再到OpenAI获得迪士尼巨额投资深耕影视生成&#xff0c;多模态已成为衡量大模型竞争力的核心标尺。这种能够统一理…

作者头像 李华
网站建设 2026/6/9 21:16:26

DingTalkRevokeMsgPatcher终极指南:飞书消息防撤回完全解决方案

DingTalkRevokeMsgPatcher终极指南&#xff1a;飞书消息防撤回完全解决方案 【免费下载链接】DingTalkRevokeMsgPatcher 钉钉消息防撤回补丁PC版&#xff08;原名&#xff1a;钉钉电脑版防撤回插件&#xff0c;也叫&#xff1a;钉钉防撤回补丁、钉钉消息防撤回补丁&#xff09;…

作者头像 李华
网站建设 2026/6/9 21:05:32

Linux 内核驱动-中断

Linux 内核驱动--中断 概述 中断是计算机系统中一种重要的异步事件处理机制,它允许外部设备在需要处理器注意时暂停当前执行的程序,转而去处理设备的需求,处理完成后再返回原程序继续执行。 中断的主要作用包括: • 提高CPU利用率:避免CPU轮询等待外部设备。 • 实现实…

作者头像 李华
网站建设 2026/6/13 4:56:50

5分钟玩转BilibiliDown:解锁B站音频下载的实用技巧

还在为喜欢的B站背景音乐无处下载而烦恼吗&#xff1f;想将UP主精心制作的音频内容永久保存&#xff0c;却苦于找不到合适的工具&#xff1f;今天&#xff0c;就让我带你全面了解这款备受好评的B站音频下载工具——BilibiliDown&#xff0c;它不仅能下载视频&#xff0c;更是一…

作者头像 李华