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

华为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

相关文章:

  • 认识文件系统
  • VMware+Windows 11 跳过安装阶段微软账号登录
  • 高性能无堆分配函数包装器的设计与实现原理(C/C++代码实现)
  • NumPy 数组重塑
  • 慢查询日志的开启与分析:优化SQL性能的实战指南
  • Win11亮度条和亮度设置消失的解决方法
  • 位运算基本知识:异或,左移,右移
  • 蓝桥杯178 全球变暖
  • 【辰辉创聚生物】FGF信号通路相关蛋白:解码生命调控的关键枢纽
  • some java面试题
  • C++23内存分配新特性:std::allocate_at_least
  • Linux 内核学习(8) --- 字符设备操作函数
  • 独占内存访问工作原理
  • 题目 3326: 蓝桥杯2025年第十六届省赛真题-最短距离
  • Linux 内核学习(9) --- Linux sysfs 文件系统
  • 驱动: file_operations、register_chrdev、/proc 文件系统概述
  • Android 启动流程开发注意事项
  • 删除链表的倒数第N个结点--LeetCode
  • 5.25本日总结
  • MySQL的查询进阶
  • 做网站怎么插音乐/长沙seo推广公司
  • 温州网站公司/海口网站建设
  • 做信息网站需要什么/情感营销
  • 如何做微信网站建设/seo技巧分享
  • 品牌建设是指/seo优化标题 关键词
  • 乐山网站建设/百度云在线登录