UVa 455 Periodic Strings
2016-05-23 18:51
190 查看
本题是在ACM比赛中经常出现的一类题目,找出最小子串的问题,可用多种方法求解,在这里列举几种
一、直接暴力枚举法
二、KMP算法求解
这里简单介绍一下KMP算法,一般情况下利用遍历搜索的方式匹配子串,但在大数据量的情况下效率比较低,由此较为高效的算法KMP算法就这样形成了。KMP算法的难点就在于next数组的规律,只要搞清楚next数组的变化情况还是比较好理解的。
KMP算法的代码:(函数)
一、直接暴力枚举法
#include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> using namespace std; char str[104]; int main() { int n; while (~scanf("%d",&n)) while (n --) { scanf("%s",str); int len = strlen(str); for (int k,i = 1 ; i <= len ; ++ i) //逐一枚举子串长度,直到能满足条件 if (len%i == 0) { //要能被字符串长度整除的 for (k = i ; k < len ; ++ k) if (str[k] != str[k%i]) break; if (k == len) { printf("%d\n",i); break; } } if (n) printf("\n"); } return 0; }
二、KMP算法求解
这里简单介绍一下KMP算法,一般情况下利用遍历搜索的方式匹配子串,但在大数据量的情况下效率比较低,由此较为高效的算法KMP算法就这样形成了。KMP算法的难点就在于next数组的规律,只要搞清楚next数组的变化情况还是比较好理解的。
KMP算法的代码:(函数)
这里写代码片
相关文章推荐
- leetcode 258 Add Digits
- java基础教程7:包
- linux新建进程--fork
- epoll的lt和et模式的实验
- 如何解决 Sublime Text 3 不能正确显示中文的问题
- Hibernate学习进阶
- 可拖动FPS显示框(UGUI)
- 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较
- centos6.5 配置mysql5.6免安装版
- javassist 学习笔记
- 六角幻方(DFS)
- O2O、C2C、B2B、B2C的区别
- 冒泡排序
- (C++)int,char,string之间的一些转换
- java之九 基本输入输出流
- java之九 基本输入输出流
- Hbase 1.2.1 Java API简单demo
- java之九 基本输入输出流
- Java中Vector ArrayList LinkedList之间的区别与联系
- R语言变量的重命名和一些处理