专栏导读
本专栏收录于《华为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机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。