博客
关于我
【KMP】重复子串
阅读量:697 次
发布时间:2019-03-14

本文共 990 字,大约阅读时间需要 3 分钟。

对于每个字符串,我们可以使用KMP算法来计算前缀函数数组。前缀函数数组的最后一个值p[len]可以帮助我们确定最大的重复子串的长度。如果p[len]不为0,那么这个长度就是最大的周期长度。重复次数就是整个字符串的长度除以周期长度。

KMP算法的步骤如下:

  • 初始化前缀函数数组p,长度为n+1,其中n是字符串的长度。
  • 遍历字符串,计算前缀函数数组中每个元素p[i]。
  • 计算周期长度为n - p[n]。
  • 如果n能被周期长度整除,那么重复次数就是n /周期长度;否则,重复次数为1。
  • 通过这种方法,我们可以高效地找到每个字符串最多能被重复连接的子串的数量。

    代码如下:

    #include 
    #include
    #include
    using namespace std;int main() { char s[10000005]; int len; scanf("%s", s + 1); len = strlen(s + 1); while (len != 1 || s[1] != '.') { int j = 0; for (int i = 2; i <= len; ++i) { while (j > 0 && s[i] != s[j + 1]) j = p[j]; if (s[i] == s[j + 1]) ++j; p[i] = j; } if (len % (len - p[len]) == 0) printf("%d\n", len / (len - p[len])); else printf("1\n"); scanf("%s", s + 1); len = strlen(s + 1); } return 0;}

    这个代码使用了KMP算法来计算前缀函数数组,从而确定最大的重复子串的周期长度和重复次数。通过这种方法,我们可以高效地解决问题,确保代码在处理长字符串时也能快速运行。

    转载地址:http://bbzlz.baihongyu.com/

    你可能感兴趣的文章
    OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
    查看>>
    OAuth2.0_环境介绍_授权服务和资源服务_Spring Security OAuth2.0认证授权---springcloud工作笔记138
    查看>>
    OAuth2.0_环境搭建_Spring Security OAuth2.0认证授权---springcloud工作笔记139
    查看>>
    oauth2.0协议介绍,核心概念和角色,工作流程,概念和用途
    查看>>
    OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code
    查看>>
    OAuth2:项目演示-模拟微信授权登录京东
    查看>>
    OA系统多少钱?OA办公系统中的价格选型
    查看>>
    OA系统选型:选择好的工作流引擎
    查看>>
    OA让企业业务流程管理科学有“据”
    查看>>
    OA项目之我的会议(会议排座&送审)
    查看>>
    OA项目之我的会议(查询)
    查看>>
    Object c将一个double值转换为时间格式
    查看>>
    object detection之Win10配置
    查看>>
    object detection训练自己数据
    查看>>
    object detection错误Message type "object_detection.protos.SsdFeatureExtractor" has no field named "bat
    查看>>
    object detection错误之Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
    查看>>
    object detection错误之no module named nets
    查看>>
    Object of type 'ndarray' is not JSON serializable
    查看>>
    Object Oriented Programming in JavaScript
    查看>>
    object references an unsaved transient instance - save the transient instance before flushing
    查看>>