最长回文数

发布时间 2023-08-28 20:33:33作者: 酷炫小兜兜

问题描述


输入一个包含N个正整数的数组,求出这个数组中包含的最长的回文数组是什么, 如果有相同长度的最长回文数,输出最靠前的一个。

解题思路


伪码:

INPUT A[]
FOR I IN 1,N{
	FOR J IN I,N{
		IF HUIWEN(A,I,J) && J-I+1>MAXLEN{
			X,Y,MAXLEN = I,J,J-I+1
		}
	}
}
OUTPUT A[X TO Y]

上代码

    int n;
    cin >> n;
    int a[n + 1];
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    int x, y, max = -1;
    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= n; j++) {
            if (f(a, i, j) && (j - i + 1) > max) {
                x = i;
                y = j;
                max = j - i + 1;
            }
        }
    }
    for (int i = x; i <= y; i++) {
        cout << a[i] << " ";
    }

f()的定义

bool f(int a[], int i, int j) {
    for (; i < j; i++, j--) {
        if (a[i] != a[j]) {
            return false;
        }
    }
    return true;
}