P8195 [传智杯 #4 决赛] 小智的疑惑 ----- 字符串匹配、KMP算法优化next数组

题目描述

传智专修学院给了小智一个仅包含小写字母的字符串 ss,他想知道,里面出现了多少次子串 chuanzhi 呢。

我们称一个字符串 tt 是 ss 的子串,当且仅当将 ss 的开头若干个(可以为 0 个)连续字符和结尾若干个(可以为 0 个)连续字符删去后,剩下的字符串和 tt 相同。例如,我们称 ab 是 abc 的子串,但 ac 不是 abc 的子串。

输入格式

输入只有一行一个字符串,表示字符串 ss。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1
welcometochuanzhicupchuanzhi
输出 #1
2

说明/提示

数据规模与约定

对于全部的测试点,保证 1 \leq |s| \leq 4 \times 10^51s4×105,|s|s∣ 表示 ss 的长度,且 ss 中只有小写字母。

KMP算法(虽然本题字符串为题目给出 所以并没有效果)

#include <iostream>
#include <string>
#include <vector>

using namespace std;
int main(){
    vector<int> next;
    string s;
    string cz = "chuanzhi";
    cin >> s;
    int n, m;
    int count = 0;
    n = s.size();
    m = cz.size();

    int x = 1;
    int now = 0;

    next.push_back(0);
    while (x < m) {
        if (cz[now] == cz[x]) {
            now++;
            x++;
            next.push_back(now);
        }
        else if (now) now = next[now - 1];
        else next.push_back(0), x++;
    }

    /*while (m--) {
        cout << next[m] << " / ";
    }*/

    int i = 0, j = 0;
    while (i < n) {
        if (s[i] == cz[j]) {
            i++;
            j++;
        }
        else if (j) j = next[j-1];
        else {
            i++;
        }
        if (j == 7) {
            count++;
            j = next[j-1];
        }
    }
    cout << count;
}

博主的KMP详解连接:👉KMP 算法理解与掌握 边学边写 ------字符串匹配问题(父串中寻找字串) - slowlydance2me - 博客园 (cnblogs.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 传智播客是一家著名的IT培训机构,成立于1998年,总部位于中国北京市。他们专注于提供高质量的IT技能培训,培养人才并满足市场对IT人才的需求。 传智播客以其优质的师资力量和完善的教育体系而闻名。他们拥有一支由业内专家和经验丰富的讲师组成的教师团队,能够提供全面的知识和实践指导。此外,他们还与许多知名的IT企业合作,以保持他们的课程内容与行业发展的最新趋势保持同步。 传智播客的培训课程涵盖了多个领域,如计算机编程、网络技术、数据库管理和移动应用开发等。无论是初学者还是有经验的专业人士,都可以找到适合他们的课程。他们的培训内容从基础知识到高级技能的学习,全方位满足学员的需求。 传智播客的特色在于他们注重实践能力的培养。培训期间,学员们将参与实际项目的开发,通过动手实践解决实际问题,提升他们的技能和经验。此外,学员们还可以借助他们的校友和教师的支持,进行项目交流和合作。 总之,传智播客作为一家领先的IT培训机构,通过提供优质的教育和实践机会,已经培养了大量的优秀IT人才。他们的成功要归功于他们的专业师资、丰富的课程和实践导向的教学方法。无论是学习者还是企业,都可以从传智播客的培训中受益,并且他们对IT行业的贡献会持续增长。 ### 回答2: 传智播客C是一家在编程教育领域具有知名度和影响力的教育机构。他们提供的培训课程以计算机编程为主,涵盖了包括软件开发、网站建设、移动应用开发等多个方向。通过他们的培训,学员可以学到实际的编程技能,并具备在相关领域就业的能力。 传智播客C作为教育机构的成功之处在于他们对教学的重视和创新。他们的教学方式注重实践,通过项目驱动的教学方式,让学员在真实的项目中进行编程实践和解决问题,从而加深对知识的理解和掌握。此外,他们还注重培养学员的动手能力和团队合作能力,通过小组协作的项目实践,让学员学会与他人合作并有效地应用所学知识。 除了教学方式的创新,传智播客C还具备其他优势。首先,他们拥有一支优秀的师资队伍,这些讲师都是业界的专业人士,能够将最新的技术和实践经验传授给学员。其次,他们与众多知名IT企业建立了合作关系,学员有机会参与实习和就业推荐。此外,他们还提供灵活的学习方式,包括线下课程和线上课程,满足不同学员的需求。 总的来说,传智播客C在编程教育领域具有很高的声誉和影响力。他们通过创新的教学方式和专业的师资队伍,为学员提供了一个良好的学习环境和就业机会。无论是想要入门编程还是提升技能,传智播客C都是一个值得考虑的教育机构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值