一、题目描述
输入两个字符串a和b,都只包含英文小写字母。a长度<=100,b长度<=500,000
。
判定a是否是b的有效子串。
判定规则:
a中的每个字符在b中都能找到(可以不连续),且a在b中字符的前后顺序与a中顺序要保持一致。
(例如,a=”qwt”
是b=”qwerty”
的一个子序列且有效字符是q、w、t)。
二、输入描述
输入两个字符串a和b,都只包含英文小写字母。a长度<=100,b长度<=500,000。
先输入a,再输入b,每个字符串占一行。
三、输出描述
a串最后一个有效字符在b中的位置。(首位从0开始计算,无有效字符返回-1)。
四、解题思路
- 读取输入的字符串 a 和 b;
- 定义变量 index 并初始化为 -1,表示有效字符在 b 中的最后位置;
- 遍历字符串 a,对于每个字符:
- 定义一个标志位 flag,初始值为 false;
- 从 index+1 开始遍历字符串 b,找到 a 中字符在 b 中的第一个匹配位置;
- 如果找到匹配位置,更新 index 为该位置,将 flag 设置为 true,跳出内层循环;
- 如果未找到匹配位置,返回当前 index 的值。
- 如果遍历完 a 后,未出现未匹配的情况,返回 index 的值;
- 输出最终结果。
五、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String a=sc.nextLine();
String b=sc.nextLine();
System.out.println(get(a,b));
}
}
private static int get(String a,String b){
int index=-1;
for (int i=0;i<a.length();i++){
boolean flag=false;
for(int j=index+1;j<b.length();j++){
if(a.charAt(i)==b.charAt(j)){
index=j;
flag=true;
break;
}
}
if(!flag){
return index;
}
}
return index;
}
六、效果展示
🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。