Simpsons’ Hidden Talents

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2798    Accepted Submission(s): 1055
Problem Description
Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had.

Marge: Yeah, what is it?

Homer: Take me for example. I want to find out if I have a talent in politics, OK?

Marge: OK.

Homer: So I take some politician’s name, say Clinton, and try to find the length of the longest prefix

in Clinton’s name that is a suffix in my name. That’s how close I am to being a politician like Clinton

Marge: Why on earth choose the longest prefix that is a suffix???

Homer: Well, our talents are deeply hidden within ourselves, Marge.

Marge: So how close are you?

Homer: 0!

Marge: I’m not surprised.

Homer: But you know, you must have some real math talent hidden deep in you.

Marge: How come?

Homer: Riemann and Marjorie gives 3!!!

Marge: Who the heck is Riemann?

Homer: Never mind.

Write a program that, when given strings s1 and s2, finds the longest prefix of s1 that is a suffix of s2.

 
Input
Input consists of two lines. The first line contains s1 and the second line contains s2. You may assume all letters are in lowercase.
 
Output
Output consists of a single line that contains the longest string that is a prefix of s1 and a suffix of s2, followed by the length of that prefix. If the longest such string is the empty string, then the output should be 0.

The lengths of s1 and s2 will be at most 50000.
 
Sample Input
clinton
homer
riemann
marjorie
 
Sample Output
0
rie 3

这题碰到了一些莫名其妙的问题,next数组本是记录模式串本身的匹配信息。我想着能不能用在两个不同的串上,然后就试验了一下,结果能想到的測试数据都能通过。可是就是WA。至今不知道错在哪里。

题意:给定两个串。求第二个串的后缀跟第一个串的前缀能匹配的最大长度并输出这个匹配串。

题解:在网上看到一种思路是将第一个串之后加入一个特殊字符,再把第二个串粘在第一个串后面,然后对这个新串求next数组。终于next[len]即为所求。

#include <stdio.h>
#include <string.h>
#define maxn 50002 char str1[maxn << 1], str2[maxn];
int ans, next[maxn << 1], len2; void getNext()
{
int i = 0, j = -1;
next[0] = -1;
while(str1[i]){
if(j == -1 || str1[i] == str1[j]){
++i; ++j;
next[i] = j;
}else j = next[j];
}
str1[ans = next[i]] = '\0';
} int main()
{
//freopen("stdin.txt", "r", stdin);
while(scanf("%s%s", str1, str2) == 2){
strcat(str1, " ");
strcat(str1, str2); getNext();
ans ? printf("%s %d\n", str1, ans) : printf("0\n");
}
}

放一个典型的错误代码。能想到的測试数据都通过了,可是提交就WA。不知道为什么。

#include <stdio.h>
#define maxn 50002 char str1[maxn], str2[maxn] = {' '};
int ans, next[maxn]; void getNext()
{
int i = 0, j = -1;
next[0] = -1;
while(str2[i]){
if(j == -1 || str2[i] == str1[j]){
++i; ++j;
next[i] = j;
}else j = next[j];
}
str1[ans = next[i]] = '\0';
} int main()
{
//freopen("stdin.txt", "r", stdin);
while(scanf("%s%s", str1, str2 + 1) == 2){
getNext();
ans ? printf("%s %d\n", str1, ans) : printf("0\n");
}
}

另外一个不知道错哪里的代码:

#include <stdio.h>
#define maxn 50002 char str1[maxn], str2[maxn] = {' ', ' '};
int ans, next[maxn]; void getNext()
{
int i = 0, j = -1;
next[0] = -1;
while(str2[i]){
if(j == -1 || str2[i] == str1[j]){
++i; ++j;
next[i] = j;
}else j = next[j];
}
str1[ans = next[i]] = '\0';
} int main()
{
//freopen("stdin.txt", "r", stdin);
while(scanf("%s%s", str1, str2 + 2) == 2){
getNext();
ans ? printf("%s %d\n", str1, ans) : printf("0\n");
}
}

HDU2594 Simpsons’ Hidden Talents 【KMP】的更多相关文章

  1. hdoj 2594 Simpsons’ Hidden Talents 【KMP】【求串的最长公共前缀后缀】

    Simpsons' Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  2. hdu 2594 Simpsons’ Hidden Talents 【KMP】

    题目链接:http://acm.acmcoder.com/showproblem.php?pid=2594 题意:求最长的串 同一时候是s1的前缀又是s2的后缀.输出子串和长度. 思路:kmp 代码: ...

  3. hdu2594 Simpsons' Hidden Talents【next数组应用】

    Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  4. HDU2594 Simpsons’ Hidden Talents —— KMP next数组

    题目链接:https://vjudge.net/problem/HDU-2594 Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Oth ...

  5. hdu2594 Simpsons’ Hidden Talents kmp

    Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...

  6. HDU 2594 Simpsons’ Hidden Talents(KMP的Next数组应用)

    Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  7. 【HDU 3746】Simpsons’ Hidden Talents(KMP求循环节)

    求next数组,(一般有两种,求循环节用的见代码)求出循环节的长度. #include <cstdio> #define N 100005 int n,next[N]; char s[N] ...

  8. hdu2594 Simpsons’ Hidden Talents LCS--扩展KMP

    Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had.Marge ...

  9. kuangbin专题十六 KMP&&扩展KMP HDU2594 Simpsons’ Hidden Talents

    Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had. Marg ...

随机推荐

  1. JavaScript 继承——三种继承方法及其优劣

    原文地址   本文内容 目的 继承的第一步--最简单的继承 私有变量/成员和原型 三种继承方式及其优劣 基本的原型继承 Yahoo JavaScript 模块模式 创建闭包的构造函数 三种方法的代码执 ...

  2. Python MySQLdb模块连接操作mysql数据库实例_python

    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...

  3. Node.js 笔记(一) nodejs、npm、express安装

    Windows平台下的node.js安装 直接去nodejs的官网http://nodejs.org/上下载nodejs安装程序,双击安装就可以了 测试安装是否成功: 在命令行输入 node –v 应 ...

  4. C语言处理文件

    C写入数据到文件 #include <stdio.h> #include <string.h> int main( ) { FILE* fd = fopen("txt ...

  5. docker安装tomcat

    先在官网上找可用的镜像 我使用的是7-jre8 获取tomcat镜像的命令:$docker pull tomcat:7-jre8 获取完镜像以后,通过命令可以列举出已有的镜像: 列举镜像的命令:$do ...

  6. iOS SDK 从配置文件里读SDK。转化成class 可同时加载多个SDK

    首先在工程中加入XXX  plist 配置文件. 然后在key 输入名字比如allsdk  value 里填写.a 文件的名字 NSString *plistPath = [[NSBundle mai ...

  7. LintCode: Convert Sorted Array to Binary Search Tree With Minimal Height

    C++ /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; ...

  8. VB 求余求整

    可以直接用函数来实现: 1.用CInt()函数的范围在-32,768 至 32,767,对于小数部分四舍五入 . 2.用Int()函数和Fix()函数都会删除参数的小数部份而返回剩下的整数, 不同之处 ...

  9. hbuilder mui uploader图片上传到服务器完整版(ASP.NET)

    html布局,比较简单,模仿微信的: <div class="dynamic_images"> <ul> <!--<li><img  ...

  10. ppt整体配色方案

        背景色建议以灰色或者被色为主.       在百度云盘也有大量的ppt模板,还是非常不错的.http://pan.baidu.com/s/1bpDf7Fh