题解 | #统计字符串中子串出现的次数#

统计字符串中子串出现的次数

http://www.nowcoder.com/practice/9eb684f845a446f3b121472de2ea75cd

题意整理。

  • 键盘输入两个字符串str和substr。
  • 求substr在str中出现的次数。

方法一(利用find函数)

1.解题思路

  • 首先将字符数组转化为字符串str1和str2。
  • 从str1下标i开始查找str2,如果找得到,计数加1,并且i从找到的位置,后移一位。

动图展示: alt

2.代码实现

#include <iostream>
#include <cstring>
using namespace std;

int main() {

    char str[100] = { 0 };
    char substr[100] = { 0 };

    cin.getline(str, sizeof(str));
    cin.getline(substr, sizeof(substr));

    int count = 0;

    //转化为字符串
    string str1(str);
    string str2(substr);
    
    int i=0;
    //从str1下标i开始查找str2
    while(str1.find(str2,i)!=-1){
        //如果找得到,计数加1
        count++;
        //i从找到的位置,后移一位
        i=str1.find(str2,i)+1;
    }

    cout << count << endl;

    return 0;
}

3.复杂度分析

  • 时间复杂度:find函数的时间复杂度为O(n+m)O(n+m)O(n+m),最多查找n次,所以时间复杂度为O(n(n+m))O(n*(n+m))O(n(n+m))
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)O(1)
xqxls的题解 文章被收录于专栏

牛客题解

全部评论
为什么是不等于-1呀
点赞 回复 分享
发布于 2025-01-15 14:12 陕西
大佬,为什么我改用for循环后没有输出结果呢for (int i = 0; i<=len;i= str.find(substr, i) + 1) { sum++;},其中len是第一个字符串的长度,但是我把中间i
点赞 回复 分享
发布于 2022-09-27 22:50 广西

相关推荐

2025-12-10 19:36
湖北工业大学 Web前端
饿魔:看到在线简历了吧
点赞 评论 收藏
分享
评论
32
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务