题目描述:
给定2个字符串s1和s2和正整数k,其中s1长度为n1,s2长度为n2,在s2中选一个子串,满足:
该子串长度为n1+k
该子串包含s1中全部字母
该子串每个字母的出现次数不小于s1中对应的字母
我们称s2以长度k冗余覆盖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
#定义函数,判断字符串s2是否符合题目中冗余覆盖s1的要求
def num_count_in(s1:str,s2:str):
count=0
a=set(s1)
b=set(s2)
l=len(a)
for i in a:
if s1.count(i)<=s2.count(i):
count+=1
if count==l:
return True
else:
return False
s1=input()
s2=input()
k=int(input())
lenth=len(s1)+k
first_alpha=-1
for num in range(0,len(s2)-lenth+2):
if num_count_in(s1,s2[num:num+lenth]):
first_alpha=num
break
print(first_alpha)