zoukankan      html  css  js  c++  java
  • KMP

    一道KMP的题。

      知识点:1.kmp[i]可能等于0

          2.手玩是个好东西

         

    for(int i = k + 1;i < lena;i++)
        {
            if(kmp[i] >= k)
            {
                if(k != 0)
                for(int i = 1;i <= k;i++)printf("%c",c[i]);
                return 0;
            }
        }

    3.这一段查找1~i这段串中是否有前缀个人觉得是比较妙的。

    #include <bits/stdc++.h>
    using namespace std;
    char c[3000002];
    int kmp[3000002];
    int lena;
    int main()
    {
        scanf("%s",c + 1);
        lena = strlen(c + 1);
        int j = 0;
        for(int i = 2;i <= lena;i++)
        {
            while(j && c[j + 1] != c[i])j = kmp[j];
            if(c[j + 1] == c[i])j++;
            kmp[i] = j;
        }
        int k = kmp[lena];
        if(k == 0)//错误1:没想到kmp[lena]可能等于0,导致一开始有一个点没输出。
        {
            printf("Just a legend");
            return 0;
        }
        for(int i = k + 1;i < lena;i++)
        {
            if(kmp[i] >= k)
            {
                if(k != 0)
                for(int i = 1;i <= k;i++)printf("%c",c[i]);
                return 0;
            }
        }
        if(kmp[k] == 0 || k == 0)
        {printf("Just a legend");
            return 0;
        }
        else 
        {
            for(int i = 1;i <= kmp[k];i++)printf("%c",c[i]);
            return 0;
        }
        
        return 0;
    }
  • 相关阅读:
    洛谷P1613 跑路
    洛谷P2149 Elaxia的路线
    洛谷P3119 草鉴定
    洛谷P1972 HH的项链
    洛谷P2458 保安站岗
    uva10061
    uva579
    uva 127 "Accordian" Patience
    uva10177 (2/3/4)-D Sqr/Rects/Cubes/Boxes?
    uva156
  • 原文地址:https://www.cnblogs.com/xyj1/p/10476267.html
Copyright © 2011-2022 走看看