笔试-字符串2
应用
给定长度分别为n1、n2的字符串s1、s2,以及正整数k。在s2中查找一个子字符串child_s2,满足以下三个条件,称作s2以长度k冗余覆盖s1:
child_s2长度:n1+k;
child_s2包含s1中的全部字母;
child_s2中每个字母的重复次数 >= s1中同一个字母的重复次数;
求从最左侧开始,满足“s2以长度k冗余覆盖s1”的首个元素的下标。
例如:s1=“ab” s2=“aabcd” k=1,则子串aab、abc均满足条件,由于前者在后者左侧,所以结果为0。
实现
s1 = input("请输入字符串s1:")
s2 = input("请输入字符串s2:")
k = int(input("请输入正整数k:"))
n1 = len(s1)
n2 = len(s2)
# a = [0, 1, 2, 3],j-i+1 = len(a),j = len(a)-1+i
start = 0
stop = n1+k-1+start
children = []
indexs = []
while stop < n2:
element = []
index = []
# 长度为n1+k的子字符串
for i in range(start, stop+1):
element.append(s2[i])
index.append(i)
# 对齐的
children.append(element)
indexs.append(index)
start = start + 1
stop = stop + 1
# print(children)
# print(indexs)
children_filter = []
indexs_filter = []
for i in range(0, len(children)):
sum = 0 # 相同计数
for j in range(0, n1):
if s1[j] in children[i]:
sum = sum + 1
# 包含s1的所有元素
if sum == n1:
children_filter.append(children[i])
indexs_filter.append(indexs[i])
# print(children_filter)
# print(indexs_filter)
print(indexs_filter[0][0])