跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

华为 OD 机试:分割均衡字符串 Python 解法

本题要求将只包含两种字符且数量相同的字符串分割成最多的均衡子串。核心思路是遍历字符串,维护两个字符的计数差值,一旦归零即表示找到一个最小均衡单元,计数器加一并重置。该贪心策略保证了分割数量的最大化,时间复杂度为 O(n)。

RefactorPro发布于 2024/2/20更新于 2026/10/2286 浏览
华为 OD 机试:分割均衡字符串 Python 解法

分割均衡字符串

题目背景

在华为 OD 机试中,字符串处理是高频考点之一。这道题考察的是对'均衡'概念的理解以及贪心算法的应用。

问题描述

所谓均衡串,是指字符串中只包含两种字符,且这两种字符的出现次数完全相同。例如 XXYY 是均衡的,但 XYY 不是。

给定一个已经满足整体均衡条件的字符串,我们需要将其尽可能多地分割成新的均衡子串。目标是求出能分割出的最大个数。

解题思路

要得到最大分割数,直觉上应该尽早完成一次分割。也就是说,只要当前前缀中两种字符的数量相等,就应该立刻切一刀。这就是典型的贪心策略。

具体做法如下:

  1. 初始化计数器,记录当前遇到的两种字符数量差。
  2. 从左到右遍历字符串,遇到第一种字符加一,第二种减一(或者分别计数)。
  3. 一旦差值为零,说明从上次分割点到当前位置构成了一个均衡子串,结果加一。
  4. 继续遍历直到结束。

这种方法的正确性在于,如果存在一个更长的均衡子串包含了当前的平衡点,那么将其拆分为两个较小的均衡子串显然能得到更大的总数。因此,局部最优即全局最优。

代码实现

下面给出基于 Python 的实现方案。为了清晰起见,我们假设输入字符串只包含 'X' 和 'Y'。

def balancedStringSplit(s: str) -> int:
    balance = 0
    count = 0
    for char in s:
        if char == 'X':
            balance += 1
        else:
            balance -= 1
        
        # 一旦平衡归零,说明找到了一个最小的均衡段
        if balance == 0:
            count += 1
    
    return count

# 测试用例
if __name__ == "__main__":
    test_str = "XXYYXYXY"
    print(balancedStringSplit(test_str))  # 输出应为 3

注意这里用 balance 变量来替代两个独立的计数器,逻辑更简洁。当 balance 回到 0 时,意味着正负抵消,两种字符数量相等。

复杂度分析

  • 时间复杂度:O(n),只需遍历一次字符串。
  • 空间复杂度:O(1),仅使用了常数个辅助变量。

对于长度达到 10000 的输入,该算法也能轻松通过。在实际面试中,写出清晰的注释和边界条件检查(虽然题目保证输入合法)会加分不少。

目录

  1. 分割均衡字符串
  2. 题目背景
  3. 问题描述
  4. 解题思路
  5. 代码实现
  6. 测试用例
  7. 复杂度分析

更多推荐文章

查看全部
  • WebStorm 安装与首次启动配置教程
  • Qt for Python:PySide6 入门指南
  • 基于动态反演与 ESO 的无人机鲁棒反馈线性化自适应姿态控制
  • TRAE IDE 使用指南:AI 原生开发环境入门
  • WebRTC 在 Android 中的应用实战
  • KWDB 运维实战:用 SQL 融合 Metrics 指标与 CMDB 资产数据
  • Vivado 环境下 FPGA 程序在线更新方案
  • Dart 设计模式:建造者模式
  • 通达信 API 与 Python 构建量化交易系统实战
  • C++ 从零实现 TCP Socket 网络工具实战
  • 自然语言处理在医疗领域的应用与实战
  • PuLID 技术:突破 AI 绘画身份一致性难题
  • HarmonyOS 应用集成静默登录与端云一体功能实践
  • 命令行工具 MCPHost:通过模型上下文协议与大模型交互
  • 自然语言处理在教育领域的应用与实战
  • SRC 漏洞挖掘实战经验与技巧总结
  • C++ DFS 与 BFS 算法实战详解
  • MATLAB 实现基于强制导向函数法(PFA)的无人机三维路径规划
  • HarmonyOS ArkTS 前景模糊样式 foregroundBlurStyle 详解
  • OpenClaw 系统架构深度解析

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online