题目链接:http://lightoj.com/volume_showproblem.php?problem=1258

就是求逆串和原串的匹配长度

答案就是原串长度的2倍减去匹配长度即可

第一次我将原串接在逆串后面然后一次求失败函数得当前串的f[len1](假设当前总串长度为len1)那么答案即为了len1-f[len1],如果f[len1]>=len ,那么答案为len

但是wrong了,,不知道原因

第二次就直接匹配原串和逆串然后就AC了

我把错误代码和正确代码都贴出来,有时间再思考为什么第一个方法错吧,有哪位朋友看到也可以指导,谢啦

错误代码:

 #include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#define maxn 1000005
using namespace std;
char s[maxn];
char s1[maxn*];
int len;
int len1;
int f[maxn*];
void callfail()
{
int i,j=,k=-;
f[]=-;
while(j<len1)
{
if(k==- || s1[j]==s1[k])
{
k++;j++;
f[j]=k;
}
else k=f[k];
}
}
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
int iCase=;
while(t--)
{
printf("Case %d: ",iCase++);
s[]='\0';
s1[]='\0';
scanf("%s",s);
len=strlen(s);
for(int i=;i<len;i++)
s1[i]=s[len--i];
s1[len]='\0';
strcat(s1,s);
len1=strlen(s1);
s1[len1]='\0';
callfail();
if(f[len1]>=len)
cout<<len<<endl;
else
cout<<len1-f[len1]<<endl;
}
}
return ;
}

正确代码:

 #include <cstdio>
#include <cstring>
using namespace std;
const int maxn = ;
char a[maxn];
char b[maxn];
int f[maxn]; void callfail()
{
int len= strlen(b);
f[] =-;
int j=,k=-;
while(j<len)
{
if(k==- || b[k]==b[j])
{
k++;j++;
f[j]=k;
}
else k=f[k];
}
}
int kmp()
{
int la = strlen(a);
int lb = strlen(b);
callfail();
int i=,j = ;
while(i<la && j<lb)
{
if(j==- || a[i]==b[j])
{
i++;j++;
}
else j=f[j];
}
return la + lb - j;
} int main()
{
int t;
scanf("%d", &t);
for (int i = ; i <= t; i++)
{
scanf("%s", a);
int l = strlen(a);
for (int j = ; j < l; j++)
{
b[l-j-] = a[j];
}
b[l] = '\0';
printf("Case %d: %d\n", i, kmp());
}
return ;
}

lightOJ 1258 Making Huge Palindromes(KMP)的更多相关文章

  1. LightOJ 1258 Making Huge Palindromes(KMP)

    题意 给定一个字符串 \(S\) ,一次操作可以在这个字符串的右边增加任意一个字符.求操作之后的最短字符串,满足操作结束后的字符串是回文. \(1 \leq |S| \leq 10^6\) 思路 \( ...

  2. LightOJ 1258 Making Huge Palindromes (Manacher)

    题意:给定上一个串,让你在后面添加一些字符,使得这个串成为一个回文串. 析:先用manacher算法进行处理如果发现有字符匹配超过最长的了,结束匹配,答案就是该字符前面那个长度加上该串原来的长度. 代 ...

  3. Making Huge Palindromes LightOJ - 1258

    题目链接:LightOJ - 1258 1258 - Making Huge Palindromes   PDF (English) Statistics Forum Time Limit: 1 se ...

  4. LightOJ 1268 Unlucky Strings(KMP+矩阵乘法+基础DP)

    题意 给出字符串的长度 \(n\) ,以及该字符串是由哪些小写字母组成,现给出一个坏串 \(S\) ,求存在多少种不同的字符串,使得其子串不含坏串. \(1 \leq n \leq 10^9\) \( ...

  5. D - 楼下水题(kmp+Manacher)

    D - 楼下水题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Statu ...

  6. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  7. POJ3376 Finding Palindromes —— 扩展KMP + Trie树

    题目链接:https://vjudge.net/problem/POJ-3376 Finding Palindromes Time Limit: 10000MS   Memory Limit: 262 ...

  8. Generating Palindromes LightOJ - 1033

    Generating Palindromes LightOJ - 1033 题意:添加最少的字符使得给出的字符串成为回文串.输出添加的字符数. 方法:常规区间dp.ans[i][j]表示使得ans[i ...

  9. LightOJ 1268 Unlucky Strings (KMP+矩阵快速幂)

    题意:给出一个字符集和一个字符串和正整数n,问由给定字符集组成的所有长度为n的串中不以给定字符串为连续子串的有多少个? 析:n 实在是太大了,如果小的话,就可以用动态规划做了,所以只能用矩阵快速幂来做 ...

随机推荐

  1. TCP的三次握手(建立连接)与 四次挥手(关闭连接)

    一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: TCP报文格式上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位 ...

  2. [编织消息框架][JAVA核心技术]jdk动态代理

    需要用到的工具  jdk : javac javap class 反编译 :JD-GUI http://jd.benow.ca/ import java.lang.reflect.Invocation ...

  3. jenkins+docker+maven+svn

    环境介绍 1.        软件需求 Jenkins  本次实验所用版本1.5.1 下载链接:https://jenkins.io/index.html Docker 本次实验所用版本 17.03. ...

  4. HDU-2298 Toxophily (三分法入门系列)

    题意: 意大利炮射出炮弹的速度为v,求在(0,0)击中(x,y)处的目标,发射炮弹的角度. 题解: 设f(α)表示角度为α时, f(α) = vsin(α) * t - 4.9 * t * t   ① ...

  5. CSS3学习笔记(2)-CSS盒子模型

    p{ font-size: 15px; text-indent: 2em; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid ...

  6. Script error.全面解析

    一些用户向我们反馈,Fundebug的[JavaScript](https://docs.fundebug.com/notifier/javascript/)监控插件抓到了很多**Script err ...

  7. Ubuntu抛弃了Untiy转向Gnome,美化之路怎么办?不用怕咱一步一步大变身!

    跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 常用软件安装+系统软件卸载:http://www.cnblogs.com/du ...

  8. node压力测试

    压力测试 ab测试(ApacheBench); 介绍: 这是apache提供的压测工具; 使用: 启动node服务; 我用的XAMPP,进入bin文件夹,打开命令行,执行下面命令: // -n: 总请 ...

  9. js 计时器小练-20160601

    今天要做一个计时器小练,所以我就做了练习,代码如下. // 初始化时间,以及定义全局量去接收计时器 var timer = 0; var t; var h, min, sec, millisec; / ...

  10. ios 获取当前设备信息、内存

    //在[UIDevice currentDevice]中的属性 @property(nonatomic,readonly,strong) NSString *name; // e.g. "M ...