You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中不使用默认函数统计子串出现次数,代码无输出求解决

问题排查与解决

原代码存在的问题

  • 变量名len覆盖了Python内置的len()函数,属于不良编程习惯,可能引发后续逻辑错误。
  • 核心逻辑错误:第一个while循环内的for i in s1[0+n::]是遍历字符串的单个字符,此时i为单个字符,ss in i只有当子串长度为1时才可能成立,大部分场景下永远为False,导致count无法累加。
  • 多余的反转字符串处理:反转原字符串再统计属于无效操作,会重复统计甚至错误计算子串出现次数,完全没必要。
  • 循环逻辑混乱:while与for循环的嵌套方式错误,无法正确遍历所有可能的子串起始位置。

修正后的代码(手动实现子串统计,不使用内置统计函数)

s1 = input("Enter the String: ")
ss = input("Enter the Substring: ")
count = 0

# 分别获取原字符串和子串长度,避免覆盖内置函数
str_len = len(s1)
sub_len = len(ss)

# 子串长度大于原字符串时直接返回0
if sub_len > str_len:
    print(count)
else:
    # 遍历所有合法的子串起始位置
    for start_idx in range(str_len - sub_len + 1):
        match_flag = True
        # 逐个字符对比子串
        for i in range(sub_len):
            if s1[start_idx + i] != ss[i]:
                match_flag = False
                break
        if match_flag:
            count += 1
    print(count)

代码逻辑说明

  1. 先判断子串长度是否大于原字符串,若成立直接输出0,因为不可能存在匹配。
  2. 遍历所有合法的子串起始索引:起始索引的最大值为str_len - sub_len,从该索引开始刚好能截取到长度为sub_len的子串。
  3. 对每个起始索引,逐个字符对比原字符串的对应片段与目标子串,完全匹配则计数加1。

内容的提问来源于stack exchange,提问作者David Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:05:25