字符串相关算法例题
来源:互联网 发布:windos系统mac怎么 编辑:程序博客网 时间:2024/06/08 06:01
B - Power Strings(KMP)
POJ - 2406
题目大意
输入一行字符串,该字符串是由一个最小字符串重复N次组成的(N>=1),要求输出N,
包含多行数据,输入为"."时结束,
数据量非常大,题目提示用scanf而非cin输入,题目没有给出字符串长度范围。
做法
字符串P长度m减去P的次长的相同前缀后缀即是最小字符串单元的长度,
用KMP算法求输入字符串P的次长的相同前缀后缀长度ma,
最小字符串单元长度mb=m-ma,输出ans=m / mb,
如果P的次长的相同前缀后缀长度为0,ans=1成立,
题目虽然没有给字符串长度范围,但实测MAXN=10^6够用。
AC-Code (C++)
Time: 125 ms Memory: 5.6 MB
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<queue>#include<stack>#include<algorithm>#include<cmath>#include<vector>using namespace std;const int MAXN = 1000005;int nextt[MAXN];char p[MAXN];int m, ma, mb;void nextt_function(void){m = strlen(p);int j = 0, k = -1;//nextt[j]=k表示字符串前j个字符的次长的相同前缀后缀长度为knextt[0] = -1;while (j < m){if (k == -1 || p[j] == p[k])nextt[++j] = ++k;elsek = nextt[k];}}int main(void){while (scanf("%s", p)){if (strcmp(p, ".") == 0)break;nextt_function();ma = nextt[m];mb = m - ma;int ans = 1;if (m % mb == 0)//还没看懂这步的意义,如果不判断会WAans = m / mb;printf("%d\n", ans);}return 0;}
阅读全文
0 0
- 字符串相关算法例题
- KMP算法总结及相关例题
- 字符串相关算法
- 字符串相关算法
- 字符串相关算法
- 字符串的相关算法
- 字符串处理相关算法
- 字符串相关算法
- 字符串相关算法
- 【算法】字符串问题相关
- 字符串相关算法
- 算法例题
- 字符串匹配相关算法总结
- java字符串反转相关算法
- 字符串相关的算法整理
- 剑指offer48相关例题
- 例题:字符串逆序
- 回溯算法及例题
- Flex DateField 日期范围
- 十进制-二进制转换测试 v2
- js判断用户的浏览设备是移动设备还是PC
- 如何使用vue-cli创建项目
- C++运算符重载范例
- 字符串相关算法例题
- 洛谷 P3398 仓鼠找sugar
- AWS云服务分析
- 洛谷 P3128 [USACO15DEC]最大流Max Flow
- 使用netty开发私有栈协议
- Struts2配置过程中常见的问题
- Python基础08 模块
- 关于笔记本预装win10/8改装win7蓝屏问题, G5030预装win8改装win7
- 【C#学习】标识符