习题解析之:子串出现了多少次?
【问题描述】
计算一个子串在目标字符串中出现的次数并输出。
相关知识
通用序列中,count()函数可以统计某子序列sub在目标序列target中不重叠(non-overlapping)时出现的次数。
如:
target = 'abcyxtabcedfjkdabdfpabc'
sub = 'abc'
print(target.count(sub)) #得到结果为3
或
target = '112345#$%114711'
sub = '11'
print(target.count(sub)) #得到结果为3
但当出现位置重叠(overlapping)时,返回结果并不准确
如:
target = '1112345#$%114711'
sub = '11'
print(target.count(sub)) #得到结果仍为3
如果计算重叠(overlapping)的情况,子串11出现次数应为4次,但count函数得到结果为3。
编程要求
本题要求设计一段代码,可以正确统计重叠(overlapping)情况下的子串出现次数。
测试说明
第一行输入目标字符串target
第二行输入子串sub
在目标字符串中统计子串sub在目标字符串target出现次数(包括重叠(overlapping)的情况)
如果该子串没有出现过,输出0
示例1
输入:
112345#$%114711
11
输出:
3
示例2
输入:
1112345#$%114711
11
输出:
4
示例3
输入:
在图书馆学习
学习
输出:
1
【编程思路】
要正确统计出重叠情况下 target 字符串中子串 sub 出现的次数,可以用循环 for i in range(len(target) - len(sub) + 1): 依次切分出长度为 len(sub) 的子字符串 s ,s = target[i:i + len(sub)],若切分出的子串 s 与输入的子串 sub 相等,则子串 sub 在字符串 target 中出现了一次,计数。
编写的源程序如下:

浙公网安备 33010602011771号