华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。
给定两个字符串 s1 和 s2 和正整数k,其中 s1 长度为 n1,s2 长度为 n2, 在s2中选一个子串,满足:
输入为三行:
s1和s2都只包含小写字母。
最左侧的 s2 以长度 k 冗余覆盖 s1 的子串的首个元素下标,若不存在,则返回-1。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1 = in.nextLine();
String s2 = in.nextLine();
int k = in.nextInt();
if (s2.length() < s1.length() + k) {
System.out.println(-1);
return;
}
int[] arr = new int[128];
for (int i = 0; i < s1.length(); i++) {
arr[s1.charAt(i)] += 1;
}
int num = s1.length();
for (int j = 0; j < s1.length() + k; j++) {
if (arr[s2.charAt(j)]-- > 0) {
num--;
}
if (num == 0) {
System.out.println(0);
return;
}
}
for (int i = 1; i <= s2.length() - s1.length() - k; i++) {
if (arr[s2.charAt(i - 1)]++ >= 0) {
num++;
}
if (arr[s2.charAt(i - 1 + s1.length() + k)]-- > 0) {
num--;
}
if (num == 0) {
System.out.println(i);
return;
}
}
System.out.println(-1);
}
ab
aabcd
1
0
下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。