zoukankan      html  css  js  c++  java
  • POJ 2406 Power Strings KMP算法之next数组的应用

    题意:给一个字符串,求该串最多由多少个相同的子串相接而成。

    思路:只要做过poj 1961之后,这道题就很简单了。poj 1961 详细题解传送门

    假设字符串的长度为len,如果 len % (len - next[len])不为0,说明该字符串不能由其他更短的字符串反复相接而成,结果输出1,否则答案为len / (len - next[len])。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define maxn 1000010
     4 char s[maxn];
     5 int next[maxn];
     6 void get_next(char str[])
     7 {
     8     next[0] = -1;
     9     int i = 0;
    10     int j = -1;
    11     int len = strlen(str);
    12     while (i < len)
    13     {
    14         if (j == -1 || str[i] == str[j])
    15         {
    16             i++; j++;
    17             next[i] = j;
    18         }
    19         else j = next[j];
    20     }
    21 }
    22 int main()
    23 {
    24     while (scanf("%s", s))
    25     {
    26         int len = strlen(s);
    27         if (len == 1 && s[0] == '.') break;
    28         get_next(s);
    29         printf("%d
    ", len % (len - next[len]) ? 1 : len / (len - next[len]));
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    open jdk
    llvm 编译
    llvm Array Bounds Check Elimination
    tmux 共享窗口大小
    llvm pass
    llvm code call graph
    llvm -O 经历过那些pass
    tcmalloc asan
    web ide
    eclipse配置
  • 原文地址:https://www.cnblogs.com/fenshen371/p/3242786.html
Copyright © 2011-2022 走看看