LightOJ 1258 Making Huge Palindromes(KMP)
题意
给定一个字符串 \(S\) ,一次操作可以在这个字符串的右边增加任意一个字符。求操作之后的最短字符串,满足操作结束后的字符串是回文。
\(1 \leq |S| \leq 10^6\)
思路
\(\text{KMP}\) 的 \(fail\) 数组是整个算法最重要的东西,能拓展出很多东西。
对于一个模式串(pattern)\(P\) ,\(fail\) 数组为 \(f\) ,那么 \(f[i]\) 就是如果匹配到 \(i\) 这个位置失配,下次去尝试的位置,也就说明了从字符串头到 \(f[i]-1\) 这一段,在 \(i-1\) 位置以左有一段相同的串。这是对 \(fail\) 数组的一种理解,想要更深入的理解,最好的方法就是做题。
本题等价于在 \(S\) 左边删去任意字符使剩下的字符串回文,只需求出字符串 \(S\) 从右开始能得到最长的回文串长度即可。设模式串为 \(S\) 的反字符串 \(P\),回文串长度就是 \(S\) 在最右端能匹配 \(P\) 的最长长度。
代码
#include<bits/stdc++.h>
#define FOR(i,x,y) for(int i=(x),i##END=(y);i<=i##END;++i)
#define DOR(i,x,y) for(int i=(x),i##END=(y);i>=i##END;--i)
typedef long long LL;
using namespace std;
const int N=1e6+5;
char T[N],P[N];
int n,f[N];int main()
{int Case;scanf("%d",&Case);FOR(cas,1,Case){scanf("%s",T);n=strlen(T);FOR(i,0,n-1)P[i]=T[n-i-1];P[n]='\0';f[0]=f[1]=0;FOR(i,1,n-1){int j=f[i];while(j&&P[i]!=P[j])j=f[j];f[i+1]=j+(P[i]==P[j]);}int j=0;FOR(i,0,n-1){while(j&&T[i]!=P[j])j=f[j];if(T[i]==P[j])j++;if(i==n-1)printf("Case %d: %d\n",cas,n+(n-j));}}return 0;
}
转载于:https://www.cnblogs.com/Paulliant/p/10204808.html
LightOJ 1258 Making Huge Palindromes(KMP)相关推荐
- JavaScript实现knuth-morris-pratt(KMP)算法(附完整源码)
JavaScript实现knuth-morris-pratt(KMP)算法(附完整源码) knuthMorrisPratt.js完整源代码 knuthMorrisPratt.test.js完整源代码 ...
- Oulipo(kmp)
Oulipo(kmp) The French author Georges Perec (1936–1982) once wrote a book, La disparition, without t ...
- 杭电ACM-LCY算法进阶培训班-专题训练(KMP)
杭电ACM-LCY算法进阶培训班-专题训练(KMP) 杭电ACM-LCY算法进阶培训班-专题训练(KMP) 剪花布条 Problem Description Input Output Sample I ...
- Python:实现knuth morris pratt(KMP)算法(附完整源码)
Python:实现knuth morris pratt(KMP)算法 from __future__ import annotationsdef kmp(pattern: str, text: str ...
- 第四章:2.串 -- 串的模式匹配算法(KMP)
前言: 目录: 1.串类型的定义 2.串的表示和实现 3.串的模式匹配算法 4.串操作应用举例 正文: 串的模式匹配即,在给定主串S 中,搜索子串T 的位置,如果存在T 则返回其所在位置,否则返回 0 ...
- LeetCode 1392. 最长快乐前缀(KMP)
1. 题目 「快乐前缀」是在原字符串中既是 非空 前缀也是后缀(不包括原字符串自身)的字符串. 给你一个字符串 s,请你返回它的 最长快乐前缀. 如果不存在满足题意的前缀,则返回一个空字符串. 示例 ...
- 字符串匹配算法(KMP)
文章目录 1. KMP由来 2. KMP算法基本原理 3. 代码 4. Leetcode 28. 实现 strStr() 1. KMP由来 上一节说的BM算法是最高效.最常用的字符串匹配算法. 最知名 ...
- 字符串的模式匹配(KMP)算法
一.背景 给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题. Knuth-Morris-Pratt 算法(简称 KMP)是解决这一问题的常 ...
- Knuth-Morris-Pratt算法(KMP)
Knuth-Morris-Pratt 字符串查找算法(常简称为 "KMP算法")是在一个"主文本字符串"S 内查找一个"词"W 的出现,通过 ...
- codeforce No to Palindromes!(枚举)
1 /* 2 题意:给定一个字符串中没有任何长度>1的回文子串!求按照字典序的该串的下一个字符串 3 也不包含长度>1的任何回文子串! 4 5 思路:从最低位进行枚举,保证第i位 不与 第 ...
最新文章
- 神操作!一行Python代码搞定一款游戏?给力!
- Extjs4 MVC 示例
- 使用scanf()函数接收带空格的字符串
- 趁有空,再了解一下GROOVY中关于类的通例
- 牛客 - 牛牛的Link Power II(线段树)
- java 秒杀多线程_秒杀多线程系列 - 随笔分类 - Joyfulmath - 博客园
- 偏移出来的数据不准_关于AD7616采集后读回来数据不准(有偏移)的问题
- nginx配置虚拟主机-端口号区分/域名区分
- linux hal 结构图
- C语言视频教程-谭浩强版-小甲鱼主讲—P2
- html编写一个飞机游戏,利用HTML5 Canvas如何制作一个简单的打飞机游戏
- 【我的OpenGL学习进阶之旅】什么是PVR文件以及如何打开它?
- 菜 根 谭 [明] 洪应明
- 商战传奇:周鸿祎死磕雷军的背后的三重玄机
- ndims matlab,MATLAB的size(),length(),ndims()函数
- js根据IP地址获取当前的省市
- html5诊断报告,网站诊断报告(模板).doc
- QtCreator添加文件夹
- win10最简单的C盘清理,亲测有效
- USDCNY即期均值顺势信号——基于Python的均值回归进阶策略
热门文章
- Spring Boot 2.3 优雅停机来了,新特性真香!!
- Tomcat爆出严重漏洞,影响所有版本,波及约8万台服务器,附解决方案!(扩散!!!)...
- 关于Spring,所有的都在这了,具有收藏价值
- 华为:行业危机时,只做一件事:抢人!
- Python3选择支持非ASCII码标识符的缘由
- 拦截导弹 (最长上升子序列LIS)
- SAStruts中文文档
- [DELPHI]数据类型
- Interesting Finds: 2008.01.04
- CString Char* 转换 - C++学习