前言
《华为OD笔试真题 JAVA》 专栏含华为OD机试真题JAVA实现、华为面试题、牛客网华为专栏真题。
如果您正在准备华为的面试,或者华为od的机会,希望可以帮到您! PS:文中答案仅供参考,不可照抄
■ 题目描述
【字符串序列判定】
输入两个字符串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
Java代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scin = new Scanner(System.in);
while(scin.hasNextLine()){
String S=scin.nextLine();
String L=scin.nextLine();
System.out.println(loIndex(S,L));
}
}
private static int loIndex(String S,String L){
int lastIndex=-1;
for (int i=0;i<S.length();i++){
boolean isFind=false;
for(int j=lastIndex+1;j<L.length();j++){
if(S.charAt(i)==L.charAt(j)){
lastIndex=j;
isFind=true;
break;
}
}
if(!isFind){
return lastIndex;
}
}
return lastIndex;
}
}