本题是计算一个字符串能完整分成多少一模一样的子字符串。

原来是使用KMP的next数组计算出来的,一直都认为是能够利用next数组的。可是自己想了非常久没能这么简洁地总结出来,也仅仅能查查他人代码才恍然大悟,原来能够这么简单地区求一个周期字符串的最小周期的。

有某些大牛建议说不应该參考代码或者解题报告,可是这些大牛却没有给出更加有效的学习方法,比方不懂KMP。难倒不应该去看?要自己想出KMP来吗?我看不太可能有哪位大牛能够直接自己“又一次创造出KMP”来吧。

好吧。不说“创造KMP”那么高难度吧,再比方这道题目,我想了好多方法。測试结果都正确的,可是提交就WA,假设不參考别人代码,老实说。恐怕再花点时间也不一定能总结出这么简单的代码来。

个人认为学习前人经验还是必经阶段。至于怎么学?眼下也仅仅能因人而异了。还没有什么超级学习方法。市场上的所谓方法还是算了吧。没用。

本题代码是很简洁的。前途是须要知道结论-自己总结出这个结论,难度还是很高的。

#include <stdio.h>
#include <string.h> const int MAX_N = 1000001;
char text[MAX_N];
int nextTbl[MAX_N];
int N; int calPowN()
{
if (N == 0) return 0;
memset(nextTbl, 0, sizeof(int)*(N));
int i = 1, j = 0;
while (i < N)
{
if (text[i] == text[j]) nextTbl[i++] = ++j;
else if (j > 0) j = nextTbl[j-1];
else i++;
}
j = N - nextTbl[N-1];
if (N % j == 0) return N/j;
return 1;
} int main()
{
while (gets(text))
{
if (text[0] == '.') break;
N = strlen(text);
printf("%d\n", calPowN());
}
return 0;
}

POJ 2406 Power Strings KMP运用题解的更多相关文章

  1. POJ 2406 Power Strings (KMP)

    Power Strings Time Limit: 3000MSMemory Limit: 65536K Total Submissions: 29663Accepted: 12387 Descrip ...

  2. poj 2406 Power Strings (kmp 中 next 数组的应用||后缀数组)

    http://poj.org/problem?id=2406 Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submiss ...

  3. poj 2406 Power Strings kmp算法

    点击打开链接 Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 27368   Accepted:  ...

  4. poj 2406 Power Strings(KMP变形)

    Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 28102   Accepted: 11755 D ...

  5. POJ 2406 - Power Strings - [KMP求最小循环节]

    题目链接:http://poj.org/problem?id=2406 Time Limit: 3000MS Memory Limit: 65536K Description Given two st ...

  6. POJ 2406 Power Strings KMP算法之next数组的应用

    题意:给一个字符串,求该串最多由多少个相同的子串相接而成. 思路:只要做过poj 1961之后,这道题就很简单了.poj 1961 详细题解传送门. 假设字符串的长度为len,如果 len % (le ...

  7. POJ 2406 Power Strings KMP求周期

    传送门 http://poj.org/problem?id=2406 题目就是求循环了几次. 记得如果每循环输出为1.... #include<cstdio> #include<cs ...

  8. poj 2406 Power Strings KMP匹配

    对于数组s[0~n-1],计算next[0~n](多计算一位). 考虑next[n],如果t=n-next[n],如果n%t==0,则t就是问题的解,否则解为1. 这样考虑: 比方字符串"a ...

  9. KMP POJ 2406 Power Strings

    题目传送门 /* 题意:一个串有字串重复n次产生,求最大的n KMP:nex[]的性质应用,感觉对nex加深了理解 */ /************************************** ...

随机推荐

  1. angular+rails集成实战

    http://start.jcolemorrison.com/setting-up-an-angularjs-and-rails-4-1-project/ 1. 添加gemgem 'sprockets ...

  2. java web 学习十一(使用cookie进行会话管理)

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  3. Atomikos 中文说明文档【转】

    Atomikos 翻译文档(英文文档来源:下载安装包中START_HERE.html)                                  ----译者:周枫 请尊重劳动成果,转载请标明 ...

  4. SQL知识累积

    详细介绍select的文章,展示原始数据.SQL.查询结果,以及在不同数据库下SQL应该如何写. https://en.wikipedia.org/wiki/Select_(SQL) 目录如下: Co ...

  5. Android的AutoCompleteTextView在API17高版本添加的setText函数在低版本系统居然能正常调用?官方文档是不是不靠谱了?

    官方文档:https://developer.android.com/reference/android/widget/AutoCompleteTextView.html#setText(java.l ...

  6. 分享一个Web弹框类

    using System; using System.Text; namespace Core { /// <summary> /// MessageBox 的摘要说明. /// < ...

  7. C#插入排序详解

    这几天一直在研究算法,也算有点心得,现在跟大家分享一下,我是用C#做的 排序算法是想要成为大虾程序员必须要掌握的技术,它其实也是一种思想,你对算法熟悉,对以后编程有很大帮助 算法思路 ⒈ 从第一个元素 ...

  8. jQuery Mobile入门教程

    简介:jQuery Mobile框架可以轻松的帮助我们实现非常好看的.可跨设备的Web应用程序.我们将后续的介绍中向大家介绍大量的代码及实例. jQuery一直以来都是非常流行的富客户端及Web应用程 ...

  9. codeforces 704B - Ant Man 贪心

    codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...

  10. 自己实现Single LinkedList

    My_Single_LinkedList 分4个部分实现(CRUD - 增删改查). 首先要有一个Node(节点类) class Node { public int val; public Node ...