5.20华为OD机试真题 新系统 – 小学英语老师批改作文 (JavaPyCC++JsGo)

小学英语老师批改作文

2026 华为OD机试真题 5月20日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

你是一名小学英语老师,正在批改学生的英语作文。由于学生在书写单词时常常会出现一些小问题,比如多余的空格,作文批改过程中需要纠正问题,包括前后多余空格去除,中间重复的空格应该删除多余空格,单词间最多只保留一个空格。 为了简化查找过程,重复字符比较忽略字符大小写,am 等于 AmAMaM

2026 华为OD机试真题 5月20日华为OD上机新系统考试真题 100 分题型

输入描述

输入一个仅包含 ASCII 字符的文本字符串 story

输出描述

请你找出批改后的作文中,最长的不包含重复字符的子串长度。

约束

0≤story.length≤1000

story 仅包含 ASCII 字符(0-127)。

示例1

输入

Hello World!

输出

7

说明

最长子串为 World!,长度为 7。

示例2

输入

hi,  jIn

输出

5

说明

先对空格和大小写做处理,输入串等价为 Hi, Jin,最长子串是 ", Jin",长度为5

解题思路

本题分两步处理:

第一步:作文文本预处理(批改操作)

  • 去除字符串首尾的所有空格
  • 将中间连续出现的多个空格压缩为单个空格(即单词间最多保留一个空格)
  • 这一步模拟了作文批改过程中对空格格式的规范化操作

第二步:滑动窗口求解最长无重复子串

  • 预处理后的文本中,利用滑动窗口技术维护一个无重复字符的子串
  • 右指针 right 不断右移遍历每个字符
  • 使用哈希表记录每个字符(小写)最近一次出现的下标
  • 当发现当前字符已在窗口内出现过时(记录下标 ≥ 窗口左边界),将左指针 left 直接跳到重复字符的下一个位置,从而保证窗口内无重复字符
  • 窗口大小(right - left + 1)即为当前无重复子串长度,用 best 记录最大值即为答案

复杂度分析

  • 时间复杂度: O(n),其中 n 为字符串长度,每个字符最多被左右指针各访问一次
  • 空间复杂度: O(min(m, 128)),其中 m 为字符集大小(ASCII最多128种字符),最坏情况下哈希表存
THE END