• POJ-1961 字符串, Next数组的应用


    给定一个字符串,求字符串的每个循环串的长度和循环节的大小

    注意初始化Next

    若 i 是 i - Next[i] 的倍数,表面这一段是循环串,循环节的长度是i - Next[i]。这是由于Next数组表示最长公共前后缀,若是倍数关系,表面前面的一段恰好是重复的。

    char s2[maxn];
    int len2;
    
    int Next[maxn];
    
    void get_Next() {
        for (int i = 2, j = 0; i <= len2; i++) {
            while (s2[i] != s2[j + 1] && j > 0) j = Next[j];
            if (s2[i] == s2[j + 1]) Next[i] = ++j;
        }
    }
    
    
    int main() {
        int n;
        int kase = 1;
        while (scanf("%d",&n)) {
            if (!n) break;
            memset(Next, 0, sizeof Next);
            scanf(" %s", s2 + 1);
            printf("Test case #%d
    ", kase++);
            len2 = strlen(s2 + 1);
            get_Next();
            for (int i = 1; i <= len2; i++) {
                //printf("%d
    ", Next[i]);
                if ((i /(i - Next[i]) > 1) && i % (i - Next[i]) == 0) printf("%d %d
    ", i, i / (i - Next[i]));
            }
            puts("");
        }
    }
  • 相关阅读:
    selenium 笔记 webdriver 2
    selenium 笔记 webdriver
    selenium 笔记 简介
    http 笔记 日志跟踪
    http 笔记 web主机托管
    http 笔记 国际化
    http 学习 安全Http
    Http 笔记 摘要认证
    http 笔记 基本认证机制
    算法基础
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13396894.html
Copyright © 2020-2023  润新知