📌  相关文章
📜  国际空间研究组织 | ISRO CS 2014 |问题 77(1)

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

国际空间研究组织 | ISRO CS 2014 |问题 77

这是一道关于字符串匹配的问题。

问题描述

给定一个字符串 text 和一个模式字符串 pattern,请你判断 patterntext 中出现的次数。

例如,如果 text"abaababaabaab"pattern"aaba",那么 patterntext 中出现的次数是 3

思路

我们可以使用一个滑动窗口,在 text 上滑动,检查每个窗口所包含的子串是否和 pattern 相等。如果相等,就计数器加一。

代码

以下是 Python 代码的实现:

def count_pattern_occurrences(text, pattern):
    count = 0
    n = len(text)
    m = len(pattern)

    for i in range(n - m + 1):
        if text[i:i + m] == pattern:
            count += 1

    return count

以下是 Java 代码的实现:

public static int countPatternOccurrences(String text, String pattern) {
    int count = 0;
    int n = text.length();
    int m = pattern.length();

    for (int i = 0; i <= n - m; i++) {
        if (text.substring(i, i + m).equals(pattern)) {
            count++;
        }
    }

    return count;
}
时间复杂度

该算法的时间复杂度是 $O(nm)$,其中 $n$ 是 text 的长度,$m$ 是 pattern 的长度。因此,当 $m$ 较大时,该算法的效率会比较差。