最长回文字串的实现

#include<iostream>
#include<string>
#include<cctype>
#include<cstring>
using namespace std;

int main()
{
    string str;
    getline(cin,str);
    int size = str.size();
    size++;
    const char *p = new char[size];
    char *q = new char[size];
    p = str.c_str();
    int num = strlen(p);
    cout << "num =" << num << endl;
    int n = 0;
    int Pos[5000]; //存储在原来字符串中的位置
    for (int i = 0; i < num; i++)
    {
        if (isalpha(p[i])){
            Pos[n] = i;
            q[n++] = toupper(p[i]);
            cout << q[n-1];
        }
    }
    cout << endl;
    cout << "n = " << n << endl;

    int sum = 0; //最长的回文串长度
    int x = 0;
    int y = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            int ok = 1;
            for (int k = i; k < j; k++)
            {
                if (q[k] != q[i+j-k])
                {
                    ok = 0;
                    break;
                }
            }
            if (ok && (j-i+1)>sum){
                sum = j-i+1;
                x = Pos[i];
                y = Pos[j];
                cout << "sum = " << sum << endl;
            }
        }
    }

    for (int i = x; i <= y; i++)
        cout << p[i];

    delete[]p;
    delete[]q;

    system("pause");
    return 0;
}


你可能感兴趣的:(最长回文字串的实现)