#OD033. 最左侧冗余覆盖子串
最左侧冗余覆盖子串
题目解析和算法源码
华为OD机试 - 最左侧冗余覆盖子串(Java & JS & Python & C & C++)_伏城之外的博客-CSDN博客
题目描述
给定两个字符串 s1 和 s2 和正整数 k,其中 s1 长度为 n1,s2 长度为 n2。
在 s2 中选一个子串,若满足下面条件,则称 s2 以长度 k 冗余覆盖 s1
-
该子串长度为 n1 + k
-
该子串中包含 s1 中全部字母
-
该子串每个字母出现次数不小于 s1 中对应的字母
给定 s1,s2,k,求最左侧的 s2 以长度 k 冗余覆盖 s1 的子串的首个元素的下标,如果没有返回-1。
举例:
s1 = "ab"
s2 = "aabcd"
k = 1
则子串 “aab” 和 "abc" 均满足此条件,由于 "aab" 在 "abc" 的左侧,"aab" 的第一个元素下部为 0,因此输出 0
输入描述
输入三行,第一行为 s1,第二行为 s2,第三行为 k
- s1 和 s2 只包含小写字母
输出描述
最左侧的 s2 以长度 k 冗余覆盖 s1 的子串首个元素下标,如果没有返回 -1。
备注
- 0 ≤ len(s1) ≤ 1000000
- 0 ≤ len(s2) ≤ 20000000
- 0 ≤ k ≤ 1000
用例1
输入
ab
aabcd
1
输出
0
说明
子串aab和abc符合要求,由于aab在abc的左侧,因此输出aab的下标:0
用例2
输入
abc
dfs
10
输出
-1
说明
s2无法覆盖s1,输出 -1