poj 2752
来源:互联网 发布:js对象排序函数 编辑:程序博客网 时间:2024/06/07 14:10
题意为:给一个字符串,找出又是前缀又是后缀的子字符串的长度,从小到大输出。
解法:利用kmp中的next数组来求解这个问题就很简单了。
首先,我们应该理解kmp算法中的next数组含义:当失去匹配之后,只需要回退一些,不需要从0开始。
也就是对于一个下标j,next[j]的值代表回退过去的位置,next[j]之前的字符串已经匹配成功过。所以不需要再次匹配
那对于这道题来说,自身肯定符合要求。
然后我们需要明白一个事实:前缀的最后一个字符肯定和这个字符串的最后一个字符相等。
这样我们只要不断rollback就可以了。
用了一个递归函数输出长度。
/* 题意:就是给出一个字符串,求既是前缀又是后缀 的串的长度,从小到大输出来 思路:next数组的使用*/#include<iostream>#include<string>using namespace std;int Next[400001], res[400001];string str;void getnext(int len){Next[0] = -1;int i = 0, j = -1;while (i < len){if (j == -1 || str[i] == str[j]){++i, ++j;Next[i] = j;}else{j = Next[j];}}}void T(int x){if (Next[x] == -1) return;T(Next[x]);cout << x << " ";}int main(){while (cin >> str){getnext(str.length());T(str.length());cout << endl;}return 0;}
0 0
- POJ 2752
- poj 2752
- poj 2752
- POJ 2752
- poj 2752
- POJ 2752
- poj(2752)
- POJ 2752
- poj 2752
- POJ 2752
- poj 2752
- POJ-2752
- POJ 2752
- POJ-2752
- poj 2752
- Poj 2752
- poj 2752
- POJ 2752
- µWebSockets:一种WebSocket服务器实现
- listview的下拉刷新和上滑加载。
- PHP7中php.ini、php-fpm和www.conf的配置
- 第十三周阅读程序 交通类纯虚函数
- Java中的String、StringBuilder以及StringBuffer
- poj 2752
- Android 获取图片资源id
- android的ListView的分割线设置为虚线
- JavaScript的实现
- 九度 OJ 1059:abc
- Lua内存泄露检测原理和weak_table弱引用
- 89-m-Gray Code
- CodingNet - Learning - 3
- Flux--Hello World