📜  门|门CS 2013 |问题 28(1)

📅  最后修改于: 2023-12-03 15:42:22.922000             🧑  作者: Mango

题目介绍:门|门CS 2013 |问题 28

这道题目是一个典型的字符串匹配问题,要求在一个字符串中寻找一个子串的数量。 具体题目描述如下:

给定两个字符串A和B,现在要寻找B在A中出现的次数,要求不能使用字符串匹配函数,需要自己写一段代码来完成。 题目保证字符串A和B的长度均小于等于10000,由大小写字母组成。

解题思路:

我们可以用字符串的滑动窗口思想来解决这个问题,遍历字符串A,以B的长度为窗口,在A中每次向右移动一个单位长度,进行匹配。当整个窗口和B匹配成功时,我们记录下这个位置,并且向右移动一个单位长度,继续进行匹配。最终,我们就能得到B在A中出现的次数。

具体的解题思路代码实现如下:

def find_substring_count(s: str, p: str) -> int:
    n = len(s)
    m = len(p)
    res = 0
    for i in range(n-m+1):
        if s[i:i+m] == p:
            res += 1
    return res

其中,s表示字符串A,p表示字符串B,循环的范围是从0到n-m+1,通过s[i:i+m]可以得到A中长度为m的子字符串,然后与B进行比较即可,匹配成功res自增1,返回最终的res即可。

总结:

这道题目虽然不需要使用到一些比较高深的算法,但是考察了我们对字符串处理和算法思想的掌握程度,相信做完这道题目后,对于字符串问题的思考会有更加深入的认识,同时也为我们接下来的算法学习打下了更好的基础。