zoukankan      html  css  js  c++  java
  • hdu 2594 Simpsons’ Hidden Talents【kmp】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594

    题意:读入串1和串2,输出串2的前缀和串1的后缀最长公共部分和长度。

    思路:将串1作为子串s2,串2作为主串s1,套用kmp.

    #include<stdio.h>
    #include<string.h>
    #define N 50010
    char s1[N],s2[N];
    int next[N],l1,l2;
    
    void get_next()
    {
        int j,k;
        j = 0;
        next[0] = k = -1;
        while(j < l2)
        {
            if(k==-1||s2[j]==s2[k])
                next[++j] = ++k;
            else
                k = next[k];
        }
        return;
    }
    void kmp()
    {
        int i,j,k;
        i = j = 0;
        while(i < l1)
        {
            if(j == -1||s1[i]==s2[j])
            {
                i++;
                j++;
            }
            else
                j = next[j];
        }
        if(!j)//当s1的后缀和s2前缀不匹配时 
            printf("0
    ");
        else
        {
            for(k = 0; k < j; k ++)//j是能匹配到s2前缀的长度 
                printf("%c",s2[k]);
            printf(" %d
    ",j);
        }
        return;
    }
    
    int main()
    {
        while(scanf("%s %s",s2,s1)!=EOF)
        {//读入时,将第二行字符串作为主串,第一行字符作为子串 
            l1 = strlen(s1);
            l2 = strlen(s2);
            get_next();//建立next数组 
            kmp();//字符串前后缀匹配 
        }
        return 0;
    }
  • 相关阅读:
    uva 10370
    uva 10107
    uva 10038
    uva 488
    伪代码格式
    公众号的秘密,知道一个biz就够了
    ToolTip 概述
    swt
    Java GUI图形界面开发工具
    Java多线程-两个小球
  • 原文地址:https://www.cnblogs.com/hellocheng/p/7559986.html
Copyright © 2011-2022 走看看