2024年华为OD机试真题-字符串序列判定

华为OD机试真题-字符串序列判定-2024年OD统一考试(D卷)

题目描述:

输入两个字符串S和L,都只包含英文小写字母。S长度<=100,L长度<=500,000。判定S是否是L的有效字串。

判定规则:S中的每个字符在L中都能找到(可以不连续),且S在L中字符的前后顺序与S中顺序要保持一致。(例如,S="ace"是L="abcde"的一个子序列且有效字符是a、c、e,而"aec"不是有效子序列,且有效字符只有a、e)

输入描述:

输入两个字符串S和L,都只包含英文小写字母。S长度<=100,L长度<=500,000。先输入S,再输入L,每个字符串占一行。

输出描述:

S串最后一个有效字符在L中的位置。(首位从0开始计算,无有效字符返回-1)

补充说明:

示例1

输入:ace

abcde

输出:4

说明:

示例2

输入:fgh

abcde

输出:-1

解题思路:

这是一道字符串子序列匹配问题,查询某一字符串是否在另一字符串的子序列中,输出最后一个匹配的字符的位置,我们只需要顺序遍历s和l,模拟字符串的匹配,逐字符检查 s 是否作为 l 的子序列出现,并在找到匹配时更新索引位置。这种解法是线性的,因为它只需遍历一次字符串 l,使得时间复杂度为 O(n),其中 n 是字符串 l 的长度。

Java解法:

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next(); // 读取第一个字符串到s
        String l = scanner.next(); // 读取第二个字符串到l
        scanner.close();
 
        int lastIdx = -1; // 初始化lastIdx为-1,表示找不到时的返回值
        int m = s.length(); // 获取字符串s的长度
        int n = l.length(); // 获取字符串l的长度
        int toMatch = 0;   // 初始化要匹配的位置为0
 
      

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

华为OD机试题库2024年 文章被收录于专栏

2024年OD统一考试(D卷),最新最完整题库。 收录130+道真题,提供解题思路,Java/Python/C++三种答案源码。

全部评论
学到了
点赞
送花
回复 分享
发布于 06-28 16:57 香港
有三种解法的详细代码,真好
点赞
送花
回复 分享
发布于 06-30 09:07 江苏
秋招专场
校招火热招聘中
官网直投

相关推荐

8 10 评论
分享
牛客网
牛客企业服务