牛棚回声

P1029 牛棚回声
时间: 1000ms / 空间: 131072KiB / Java类名: Main

背景

USACO OCT09 3RD

描述

奶牛们灰常享受在牛栏中牟叫,因為她们可以听到她们牟声的回音。虽然有时候并不能完全听到完整的回音。Bessie曾经是一个出色的秘书,所以她精确地纪录了所有的牟叫声及其回声。她很好奇到底两个声音的重复部份有多长。

输入两个字符串(长度為1到80个字母),表示两个牟叫声。你要确定最长的重复部份的长度。两个字符串的重复部份指的是同时是一个字符串的前缀和另一个字符串的后缀的字符串。

我们通过一个例子来理解题目。考虑下面的两个牟声:

     moyooyoxyzooo
     yzoooqyasdfljkamo

第一个串的最后的部份"yzooo"跟第二个串的第一部份重复。第二个串的最后的份"mo"跟第一个串的第一部份重复。所以"yzooo"跟"mo"都是这2个串的重复部份。其中,"yzooo"比较长,所以最长的重复部份的长度就是5。

输入格式

输入格式:

* 前两行: 每一行是1个字符串表示奶牛的牟声或它的回声。



输出格式

输出格式:

* 第一行: 包含一个单独的整数表示输入的2个字符串中,一个字符串的前缀和另一个字符串的后
缀的最长的重复部份的长度。

测试样例1

输入

abcxxxxabcxabcd 
abcdxabcxxxxabcx

输出

11

备注

"abcxxxxabcx"是第一个字符串的前缀和第二个字符串的后缀。
 

一个从头一个从尾,两个指针一直比较,然后换过来,一个从尾,一个从头,枚举模拟答案进行判断
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define inf 0x7fffffff
using namespace std;
char s1[100],s2[100];
bool check(char a[],char b[],int l)
{
    int n=strlen(b+1);
    for(int i=1;i<=l;i++)if(a[i]!=b[n-l+i])return 0;
    return 1;
}
int main()
{
    scanf("%s%s",s1+1,s2+1);
    int n1=strlen(s1+1),n2=strlen(s2+1);
    for(int i=min(n1,n2);i>=1;i--)
    {
        if(check(s1,s2,i)||check(s2,s1,i))
        {
            cout<<i;
            puts("");
            break;
        }
    }
    return 0;
}
弱的不行的我QAQ题都不会写

 

 
 
posted @ 2016-08-23 14:13  pandaB  阅读(449)  评论(0编辑  收藏  举报