AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P3259. 最左侧冗余覆盖子串

中等通过率 37% · 提交 977 · 通过 365
滑动窗口字符串哈希表固定滑窗

小慕正在处理两个字符串 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。

示例

示例 1

输入

ab
aabcd
1

输出

0

说明:子串aab和abc符合要求,由于aab在abc的左侧,因此输出aab的下标:0

示例 2

输入

abc
dfs
10

输出

-1

说明:s2无法覆盖s1,输出 -1

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
示例:s1="ab", s2="aabcd", k=1 子串长度 = n1 + k = 2 + 1 = 3 a a b c d 0 1 2 3 4 子串 "aab" (下标0~2) 子串 "abc" (下标1~3) 结论:最左侧子串起始下标为 0 字母计数要求: s1中:a:1, b:1 子串"aab"中:a:2≥1, b:1≥1 ✓
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「最左侧冗余覆盖子串」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。