在文件的读入,我开始是先整个读入到一个数组中,然后遍历数组再去除无效的字符,这种方式下,在第二个测试数据上就超时了。
将字符串的处理在读入的时候就做,每次读入一个字符然后判断是有有效,有效的存入另外一个字符,并记录原来的字符位置。
感觉这两种方式都是O(n)的时间,奇怪为什么前一种会超时啊~~~????
(1)按照网上的 一个所谓的O(n)办法
以当前字符结尾的最长回文长度计算:
fn(i) = fn(n - 1) + 2 char(i) == char(n – fn(i -1) -1)
fn(i) = 3 奇数
fn(i) = 2 偶数
else 1
这种情况系的话,lvlvlvlv的计算结果就是 11335357 ,vlvlvlv
应该的结果是遇到的第一个回文lvlvlvl
(2)一种解决办法就是奇偶对称的分别计算
用两个数组记录到字符i的最长奇、偶回文长度
这次终于搞定了
(3)看到还有一种解决方法就是穷举以每个字符为中心的回文长度,然后找出最大值