最长回文串

来源:互联网 发布:电脑像素画软件 编辑:程序博客网 时间:2024/05/16 05:14

ABCBADEFEDAG

此算法最直观的方法是遍历法,复杂度为O(n^2)。

不过只需遍历一次,就可得到此串最长回文串,复杂度为O(n)。其算法具体如下:

初始每个字符为中心的最大回文串长度都是1,计为p[n] = 1,暂不考虑邻接对称的情况。对于考虑邻接对称的情况,应对策略是,在串中依次插入一个空格,求取新串回文串。

#include<iostream>using namespace std;int huiwen(char *s){int maxn = 0, maxi = 0;int mid = 1;int n = strlen(s);int *p = new int[n];for (int i = 0; i < n; i++){p[i] = 1;}for (int i = 2; i<n; i++){if (2 * mid - i >= 0 && s[i] == s[2 * mid - i]){p[mid]++;if (p[mid>maxn]){maxn = p[mid];maxi = mid;}}else {mid = i;}}cout << maxn << " " << maxi << endl;delete[]p;return 0;}void main(){char s[] = "ABCBADEFEDAG";huiwen(s);}


0 0
原创粉丝点击