当前位置: 首页 > ds >正文

华为OD机试真题—— 判断字符串子序列(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 B卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《判断字符串子序列》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO


题目名称:判断字符串子序列


  1. 知识点:字符串、双指针算法、逻辑处理
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 限定语言:不限

题目描述

华为OD机试题原题:判断字符串子序列

题目描述

给定两个字符串 targetsource,判断 target 是否为 source 的子序列。

  • 字符串仅包含英文小写字母。
  • source 可能很长(长度 ≤ 500,000),target 较短(长度 ≤ 100)。
  • 子序列定义:通过删除 source 中的某些字符(可不删除)而不改变剩余字符的相对顺序形成的新字符串。例如,“abc” 是 “aebycd” 的子序列,但 “ayb” 不是。
  • 输出要求:返回 target 作为 source 子序列的最后一个匹配的起始位置(首字母下标,从0开始)。若不存在,返回 -1
输入描述
  • 第一行为 target,第二行为 source
输出描述
  • 一个整数,表示最后一个子序列的起始位置或 -1
示例

输入

abc  
abcaybec  

输出

3  

说明:存在两个匹配的子序列(起始位置0和3),取最后一个。


Java

问题分析

题目要求判断字符串 target 是否为 source 的子序列,并返回最后一个匹配的起始位置。子序列需保证字符顺序但可不连续,且要找到最右边的起始点。


解题思路

  1. 逆向遍历:从 source 末尾开始向前遍历,寻找 target 的每个字符的最后出现位置。
  2. 记录位置:当匹配到 target 的字符时,记录其在 source 中的位置。
  3. 确定起始点:若所有字符均匹配,则第一个记录的字符位置即为最后一个匹配的起始位置。

代码实现

import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String target = scanner.nextLine().trim();String source = scanner.nextLine().trim();int result = findLastStartPosition(target, source);System.out.println(result);}private static int findLastStartPosition(String target, String source) {if (target.isEmpty()) return -1; // 空字符串处理char[] tArr = target.toCharArray();char[] sArr = source.toCharArray();int[] positions = new int[tArr.length]; // 存储匹配的位置Arrays.fill(positions, -1);int i = tArr.length - 1; // 从 target 的最后一个字符开始匹配for (int j = sArr.length - 1; j >= 0 && i >= 0; j--) {if (sArr[j] == tArr[i]) {positions[i] = j; // 记录当前字符的位置i--; // 继续匹配前一个字符}}// 如果所有字符均匹配,返回起始位置(positions[0])return (i == -1) ? positions[0] : -1;}
}

代码解析

  1. 输入处理:读取 targetsource,并进行去空格处理。
  2. 空处理:若 target 为空,直接返回 -1。
  3. 字符数组转换:将字符串转为字符数组方便索引操作。
  4. 位置记录数组positions 数组用于保存 target
http://www.xdnf.cn/news/8882.html

相关文章:

  • 【EcelVBA】系统学习 ActiveX 控件
  • 恒坤新材闯上市:利润受益于大额补贴,产能利用率低仍要募资扩产
  • OD 算法题 B卷【最长公共后缀】
  • C++修炼:哈希表的模拟实现
  • 【python实战】-- 选择解压汇总mode进行数据汇总20250525更新(篇幅2)
  • 塔能科技:以多元技术赋能全行业能耗节能转型
  • 力扣刷题(第三十七天)
  • Linux之概述和安装vm虚拟机
  • Oracle附加日志概述
  • Day 31 训练
  • 哪款云手机支持安卓12系统?掌派云手机-性价比之选
  • Threejs 透明模型渲染嵌套以及深度测试解决共存问题
  • 什么是ESLint?它有什么作用?
  • 10G/25G PCS only mode for CoaXPress Over Fiber
  • 9. Spring AI 各版本的详细功能与发布时间整理
  • 华为OD机试真题——出租车计费/靠谱的车 (2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • Spring Cloud Sleuth与Zipkin深度整合指南:微服务链路追踪实战
  • Python实战:轻松连接与高效操作Elasticsearch
  • HDFS存储原理与MapReduce计算模型
  • 嵌入式学习笔记——day27
  • 奈雪小程序任务脚本
  • 计算机病毒的发展历程及其分类
  • Lua 脚本在 Redis 中的运用-22
  • leetcode 39. Combination Sum和40. Combination Sum II
  • 容器化:用于机器学习的 Docker 和 Kubernetes
  • 正则表达式全解:一文学会正则表达式【附在线正则表达式练习网站】
  • Android事件分发学习总结
  • SpringBoot-配置文件
  • MLA:Transformer的智能变形金刚——解密多头潜在注意力的进化密码
  • Linux `|` 管道操作符深度解析与高阶应用指南