Python - 字符串中可能存在的子串计数


本文我们将学习各种方法,利用这些方法可以计算给定字符串中子串的个数。在使用 Python 时,您可能遇到过需要检查给定单词在一个句子或任何字符串中出现了多少次的情况,因此,为了获得较长主字符串中子串的计数,我们将看到一些程序。

方法 1:使用 count 方法

这是一种简单易用的 Python 内置方法,允许我们计算主字符串中的子串个数。其时间复杂度为 O(n)。

示例

def count_substr_possible(str, substr):
   count = str.count(substr)
   return count
str="soneduonempaone"
substr="one"
print("Substring count is:",count_substr_possible(str, substr))

输出

Substring count is: 3

解释

在此函数中,我们将要计数的字符串和子串作为参数传递,并将子串赋值给字符串的 count 函数。此 count() 方法将返回子串出现的总次数。在字符串“soneduonempaone”中,子串“one”出现了 3 次,因此结果将为 3,这是字符串中子串的总数。

方法 2:使用正则表达式

此方法允许我们处理字符串,例如子串匹配和计数。它还具有查找高级模式匹配的功能。

示例

import re

def count_substr_possible(str, substring):
   count = len(re.findall(substring, str))
   return count
str="soneduonempaone"
substr="one"
print("Substring count is:",count_substr_possible(str, substr))

输出

Substring count is: 3

解释

在此程序中,我们导入正则表达式库,并使用 're' 中的 findall 函数查找字符串中子串的所有出现。findall() 函数返回匹配子串的列表,并使用 len() 函数查找列表的长度,这将作为主字符串中子串的总出现次数。

方法 3:使用循环和 find() 函数

在此方法中,我们迭代给定的字符串,并使用 string.find() 函数查找子串的出现次数。

示例

def count_substr_possible(str, substr):
   count = 0
   index = 0

   while index != -1:
      index = str.find(substr, index)
      if index != -1:
         count += 1
         index += 1

      return count

str="soneduonempaone"
substr="one"
print("Substring count is:",count_substr_possible(str, substr))

输出

Substring count is: 1

解释

在上面的程序中,我们创建了两个变量 count 和 index,其中 count 初始化为 0,因为最初子串计数为 0。我们将使用 find() 函数检查子串的出现,从初始索引开始,直到它返回 -1。如果出现子串(例如索引不为 -1),则我们将 count 加 1。

方法 4:使用比较和切片

使用此方法,我们执行切片和比较操作来计算字符串中子串出现的总次数。

示例

def count_substr_possible(str, substr):
   count = 0
   sub_len = len(substr)

   for i in range(len(str) - sub_len + 1):
      if str[i:i + sub_len] == substr:
         count += 1

      return count

str="soneduonempaone"
substr="one"
print("Substring count is:",count_substr_possible(str, substr))

输出

Substring count is: 0

解释

与方法 4 示例相同,我们将创建一个 count 变量,其初始值为 0,它将保存子串出现的总次数。我们将遍历字符串,从 0 到字符串的长度,并将使用从当前位置 i 开始的子串的切片操作。

示例

from itertools import combinations

def count_substr_possible(str, substr):
   count = 0
   sub_len = len(substr)

   for length in range(sub_len, len(str) + 1):
      for i in range(len(str) - length + 1):
         sub = ''.join(str[i:i+length])
         if sub == substr:
            count += 1

   return count

str = "soneduonempaone"
substr = "one"


print("Substring count is:",count_substr_possible(str, substr))

输出

Substring count is: 3

解释

在此程序中,我们从 itertools 导入了 combinations。我们的名为 count_substr_possible 的函数将字符串和子串作为两个参数。使用两个嵌套循环,我们将生成字符串中字符的组合,外循环将从子串的长度遍历到较长字符串的长度以生成不同长度的子串。然后,我们将使用等号比较子串,如果它们相等,则我们将 count 变量加 1。

因此,我们看到了一些可以找到较长字符串中子串总数的方法。我们看到了四种不同的方法来使用 Python 语言解决这个问题。在所有四种方法中,string.count() 方法具有非常简单有效的解决方案方法,而正则表达式匹配提供了一种非常有效的方法来查找复杂的模式匹配场景。切片和比较也为我们提供了一种非常简单的方法来计算子串出现的次数。因此,您可以根据需要和易用性选择任何方法,但了解不同的方法可以帮助您更好地学习。

更新于:2023年10月13日

97 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告