KMP算法

next数组的求法

void calc_next() {
next[]=;
for (int i=, j=; i<=n; ++i) {
while (j>&&a[i]!=a[j+]) j=next[j];
if (a[i]==a[j+]) ++j;
next[i]=j;
}
}

f数组的求法

void calc_next() {
for (int i=, j=; i<=m; ++i) {
while (j> && (j==n || b[i]!=a[j+])) j=next[j];
if (b[i]==a[j+]) ++j;
f[i]=j;
//if (f[i]==n) //此时就是A在B中的某一次出现
}
}

【例题】POJ1961 Period

 #include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define next nxt
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=+;
char a[maxn];
int next[maxn], n, T; void calc_next() {
next[]=;
for (int i=, j=; i<=n; ++i) {
while (j>&&a[i]!=a[j+]) j=next[j];
if (a[i]==a[j+]) ++j;
next[i]=j;
}
} int main() {
//freopen("a.txt", "r", stdin);
//freopen("a.out", "w", stdout);
int kase=;
while (cin>>n&&n) {
scanf("%s", a+);
calc_next();
printf("Test case #%d\n", ++kase);
for (int i=; i<=n; ++i) {
if (i%(i-next[i])== && i/(i-next[i])>)
printf("%d %d\n", i, i/(i-next[i]));
}
printf("\n");
}
return ;
}

最小表示法

    n=strlen(s+);
for (int i=; i<=n; ++i) s[n+i]=s[i];
int i=, j=, k;
while (i<=n&&j<=n) {
for (k=; k<n&&s[i+k]==s[j+k]; ++k);
if (k==n) break;
if (s[i+k]>s[j+k]) {
i=i+k+;
if (i==j) ++i;
}
else {
j=j+k+;
if (i==j) ++j;
}
}
int ans=min(i, j);

0x15 字符串的更多相关文章

  1. 算法竞赛进阶指南——0x15 字符串学习笔记

    K M P模式匹配 #include <bits/stdc++.h> using namespace std; #define N 100 char s[N]; char m[N]; in ...

  2. Qt使用AES加密算法对字符串进行加密

          因工作需要,需要对字符串进行加密处理,在网上找了很长时间,终于找到了一个可以使用的aes加密算法.其源代码采用c++编写而成,但其头文件引用windows.h,经过修改部分代码,将#inc ...

  3. Java & PHP & Javascript 通用 RSA 加密 解密 (长字符串)

    系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...

  4. C# String 字符串一些关键理解

    #1 :在.Net Framework中,字符总是表示成16位Unicode的代码#2 :String 和string 其实是一样的只是表现形式上不同#3 :string类型被视为基元类型,也就是编译 ...

  5. SWPUCTF_2019_login(格式字符串偏移bss段)

    题目的例行检查我就不放了,将程序放入ida中 很明显的值放入了bss段的格式字符串,所以我们动态调试一下程序 可以看到ebp这个地方0xffd0dd17-->0xffd0dd38-->0x ...

  6. 字符串/16进制/ASCII码的转换

    1 /// <字符串转16进制格式,不够自动前面补零> 2 /// 假设文本框里面填写的是:01 02 03 04 05 06 3 /// Str获取的是01 02 03 04 05 06 ...

  7. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  8. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  9. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

随机推荐

  1. Java基础介绍运行机制笔记

    1. 基础知识点图解 编程语言核心结构:变量.基本语法.分支.循环.数组.…… Java面向对象的核心逻辑:OOP.封装.继承.多态.接口…… 开发Java SE高级应用程序:异常.集合.I/O.多线 ...

  2. leetcode的Hot100系列--461. 汉明距离

    求两个数的二进制位不同的位置,最先想到的就是异或操作, 异或:按位运算,相同为0,不同为1. 比如: a = 6 对应的二进制表示为: 0 0 1 1 1 ​ b = 9 对应的二进制表示为: 0 1 ...

  3. 一套简单的web即时通讯——第一版

    前言 我们之前已经实现了 WebSocket+Java 私聊.群聊实例,后面我们模仿layer弹窗,封装了一个自己的web弹窗 自定义web弹窗/层:简易风格的msg与可拖放的dialog,生成博客园 ...

  4. HTTP 学习笔记03

    通用信息头 Cache-Control : no-cache(不缓存当前请求) [*] Connection:close(返回当前请求后立即断开)[*] Date:...(HTTP消息产生的时间) P ...

  5. Codeforces Gym100543L:Outer space invaders(区间DP)

    题目链接 题意 有n个人,每个人有一个出现时间a和一个开枪时间b和一个距离d,在任意一个时刻,你可以选择炸人,你要炸一个人的花费是和他的距离d,并且所有的已经出现并且还没开枪的和你距离<=d的人 ...

  6. C++学习书籍推荐《Exceptional C++》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <Exceptional C++:47个C++工程难题.编程问题和解决方案(中文版)>中的每个问题都给出了难度系数,在这些问题中阐释一些微妙的编程 ...

  7. Centos7 防护墙 设置端口

    Centos7中的防火墙调整为firewalld,试一下systemctl stop firewalld关闭防火墙. 命令:systemctl stop firewalld 命令:systemctl ...

  8. Java学习笔记之---集合

    Java学习笔记之---集合 (一)集合框架的体系结构 (二)List(列表) (1)特性 1.List中的元素是有序并且可以重复的,成为序列 2.List可以精确的控制每个元素的插入位置,并且可以删 ...

  9. 为使用mock方案测试,而重构代码的小小案例

    import com.sun.deploy.config.DefaultConfig; import javax.security.auth.login.Configuration; import j ...

  10. 从零开始认识Dubbo

    目录 1.Dubbo是什么 2.Dubbo能做什么 3.Dubbo架构 4.Dubbo的使用方法 5.使用Dubbo可能遇到的问题 1.Dubbo是什么 http://dubbo.apache.org ...