B.丁姐姐喜欢LCS

题目描述

丁姐姐最近迷上了LCS(The longest common substring)!
今天她想找个其它东西玩,于是她找到了两个字符串A和B,现在她想知道它们尾头衔接形成的最长字符串,例如A = abc,B = bca从A的尾部开始,A串的bc与B串的bc头尾衔接。

输入描述:

输入数据包含多个测试样例,每个测试样例占两行,第一行是字符串A,第二行是字符串B,保证每个字符串的长度不超过1010。

输出描述:

A和B尾头衔接形成的最长字符串,对于每个测试实例,输出一行,若两个字符串不衔接,输出"NULL!"(包含引号)。

示例

输入

abc
bca
wad
ad
as
asd
wa
aw
wa
wwa

输出

bc
ad
as
a
“NULL!”

思路:

首先很简单的一道题,题意为寻找最长的匹配前后缀链接,所以只需要从S中寻找第一个匹配的字符依次进行判断。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include 
#include
#define PI 3.1415926535
#define MAX 10005
#define INF 0x3f3f3f3f
#define lowbit(x) (x&(-x))
#define fori(a,b) for(int i=a;i<=b;i++)
#define mem(a,b) memset(a,b,sizeof(a))
#define BASE 10000
#define BASE 10000
using namespace std;
typedef long long ll;
const int maxn=1e15+5;
using namespace std;
typedef struct fract fract;
char a[1011],b[1011];
int main()
{
        ll i,k;
        ll  l,m,n,x,y,z,sum,num;
    while(cin>>a>>b)
    {
        int j=0;
        x=strlen(a);
        y=strlen(b);
        for(i=0;i<x;i++)
        {
            if(a[i]==b[j])
                j++;
            else
                j=0;
        }
        if(!j)
        {
            printf("\"NULL!\"\n");
            continue;
        }
        for(i=0;i<j;i++)
        {
            printf("%c",b[i]);
        }
        cout<<endl;
    }
}

这道题考虑了很久才交,因为当时考虑是否存在不断更新的情况,后来考虑是不能存在的。

你可能感兴趣的:(牛客)