牛棚回声

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题都不会写

 

 
 

转载于:https://www.cnblogs.com/gc812/p/5799143.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值