【問題描述】
計算一個子串在目標字符串中出現的次數並輸出。
相關知識
通用序列中,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 中出現了一次,計數。
編寫的源程序如下: