问题:
- 输入一个正整数 k,一个字符串 A和字符串B,统计A中长度为k的子串在B中出现的总次数,输出总次数。
例如:k=2, A =’abba’, B=’abbaab’,则A的长度为2 的子串有 [‘ab’,’bb’,’ba’],它们在B中出现的次数分别为2、1、1,所以输出4
思路:
思路1:获取A长度为k的所有字串,去重,统计每个字串在B中的出现次数,再求和
思路2:获取B的所有长度为k的字串,不去重,然后把A的字串(去重)与B的字串(未去重)进行匹配
获取A的所有子串的方法
# i控制起点, j控制偏移量
# 不会写的时候,先把数学逻辑(开始、结束范围)在纸上写出来,然后根据语言的语法进行转换,接着用demo检验正确性
# i的值域:0-len(A); j的值域:1-(len(A)-i)
substr_of_A = [ A[i:i+j] for i in range(len(A)) for j in range(1, len(A)-i+1) ]
# 求B的子串并去重
substr_of_B = set( [ B[i:i+j] for i in range(len(B)) for j in range(1, len(B)-i+1) ] )
测试结果:
代码:
import sys
if __name__=='__main__':
data = []
for i in range(3):
line = sys.stdin.readline()
data.append(line.strip())
k = int(data[0])
A = str(data[1])
B = str(data[2])
# i的取值范围为:开头(0)到 len(A)-k;用 set 去重
substr_k_of_A = set( [ A[i:i+k] for i in range(len(A)-k+1) ] )
num_substr = 0
# 写法一(用string的count函数)
# for item in substr_k_of_A:
# t = B.count(item) # 用字符串对象函数查找B中出现item的次数
# num_substr += t
# print(num_substr)
# 写法二(用自己定义的for循环)
for item in substr_k_of_A:
t = 0
# 统计每个字串在B中出现的次数
for j in range(len(B)-k+1):
if B[j:j+k]==item:
t += 1
num_substr += t
print(num_substr)