zoukankan      html  css  js  c++  java
  • 牛棚回声

    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题都不会写
     
     
  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/gc812/p/5799143.html
Copyright © 2011-2022 走看看