回文串(最长前缀/最长子串)

来源:互联网 发布:淘宝网团购 编辑:程序博客网 时间:2024/06/05 04:45
#include "stdafx.h"#include <iostream>using namespace std;//求最长前缀回文串int palindromical(string s){    if (s.size() == 0)        return 0;    int fc = s[0];    int i = 0;    int maxlen = 1;    while (i < s.size())    {        if (s[i] == s[0])        {            int start = 0, end = i;            while (start <= end){                if (s[start] == s[end])                {                    start++;                    end--;                }                else{                    break;                }            }            if (start > end){                maxlen = (maxlen > (i + 1) ? maxlen : (i + 1));            }        }        i++;    }    return maxlen;}//最长子回文串int palindromic(string s){    if (s.size() == 0)        return 0;    int i = 0;    int maxlen = 0;    while (i < s.size()){        int start = i, end = i;        while (end+1<s.size() && s[end + 1] == s[end]) ++end;        i = end + 1;        while (start>0 && end+1<s.size() && s[start - 1] == s[end + 1]){            start--;            end++;        }        maxlen = (maxlen > (end - start + 1) ? maxlen : (end - start + 1));    }    return maxlen;}int main(){    cout<<palindromical("SoooS");    system("pause");    return 0;}