题目链接: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. ORA-01994: GRANT failed: password file missing or disabled

    1.错误现象 SQL> grant sysdba to test;grant sysdba to test*ERROR at line 1:ORA-01994: GRANT failed: pa ...

  2. 妈妈再也不用担心我的移动端了:网易和淘宝的rem方案剖析

    从博主学习前端一路过来的经历了解到,前端移动开发是大部分从PC端转战移动端的小伙伴都非常头疼的一个问题,这边博主就根据一篇自己看过的移动开发文章来剖析一下网易和淘宝的rem解决方案,希望能够帮助到一些 ...

  3. 《连载 | 物联网框架ServerSuperIO教程》- 17.支持实时数据库,高并发保存测点数据。附:3.4 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  4. iOS 历史浏览网页的定向跳转

    在实际的开发过程中,涉及到交互的问题,原生和H5的网页相互嵌套,直接造成跳转的混乱,混乱就应该指定的历史记录中,就需要网页的一些相关的一些属性问题 需要在webview里面的代理方法中执行相对应的操作 ...

  5. Linux文件管理下

    文件操作 对于文件,我们可以读取(read),写入(write)和运行(execute).读取是从已经存在的文件中获得数据.写入是向新的文件或者旧的文件写入数据.如果文件储存的是可执行的二进制码,那么 ...

  6. TableView cell自适应高度-----xib

    1.通过xib创建一个cell,将label进行上左下右,进行适配, self.automaticallyAdjustsScrollViewInsets = NO; self.edgesForExte ...

  7. hdoj_2546饭卡(强忍悲痛,好好写题解)

    Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...

  8. JavaScript数组基础编程题归纳

    之前的随笔"JavaScript中数组类型的属性和方法"中有介绍很多数组类型的方法,但都是一些理论.最近在练习在线编程题,发现自己还是习惯于用常规的循环来答题,对于数组的方法的使用 ...

  9. 1020. Tree Traversals

    Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...

  10. Html 经典布局(二)

    经典布局案例(二): <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...