华为OD机试 - 判断字符串子序列(Java 2023 B卷 100分)-LMLPHP

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

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

你可以认为 target 和 source 中仅包含英文小写字母。字符串 source可能会很长(长度 ~= 500,000),而 target 是个短字符串(长度 <=100)。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"abc"是"aebycd"的一个子序列,而"ayb"不是)。

请找出最后一个子序列的起始位置。

二、输入描述

第一行为target,短字符串(长度 <=100)
第二行为source,长字符串(长度 ~= 500,000)

三、输出描述

最后一个子序列的起始位置, 即最后一个子序列首字母的下标。

示例:

1、输入

abc
abcaybec

2、输出

3

3、说明

这里有两个abc的子序列满足,取下标较大的,故返回3。

四、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String target = sc.nextLine();
        String source = sc.nextLine();
        int i = target.length() - 1;
        int j = source.length() - 1;
        boolean flag = false;
        while (i >= 0 && j >= 0) {
            if (target.charAt(i) == source.charAt(j)) {
                if (i == 0) {
                    flag = true;
                    System.out.println(j);
                }
                i--;
            }
            j--;
        }
        if (!flag) {
            System.out.println(-1);
        }
    }
}

五、效果展示

1、输入

abc
abcaybec

2、输出

3

华为OD机试 - 判断字符串子序列(Java 2023 B卷 100分)-LMLPHP


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试 - 判断字符串子序列(Java 2023 B卷 100分)-LMLPHP

09-30 03:30