Python中求解最长回文子串的代码在本地运行正常,但在在线编译器中报错,如何修改N值?

错误:

Traceback (most recent call last): File "/usercode/file.py", line 25, in <module> for i in range(N): TypeError: range() integer end argument expected, got str.

代码:

def TheLongest(s):
    s = '#' + '#'.join(s) + '#'
    length = len(s)
    Rl = [0]*length
    pos = 0
    MaxRight = 0
    MaxLen = 0
    for i in range(length):
        if i < MaxRight:
            Rl[i] = min(Rl[2*pos - i], (MaxRight - i))
        else:
            Rl[i] = 1
        while i - Rl[i]>= 0 and i+Rl[i]<length and s[i - Rl[i]] == s[i+Rl[i]]:
            Rl[i]+=1
        if Rl[i]+i-1 >MaxRight:
            pos = i
            MaxRight = Rl[i]+i-1
        MaxLen = max(MaxLen,Rl[i])
    return (MaxLen-1)

N = raw_input() a_list = [] for i in range(N): s = raw_input() a_list.append(TheLongest(s)) for i in range(N): print a_list[i]


Python中求解最长回文子串的代码在本地运行正常,但在在线编译器中报错,如何修改N值?

20 回复

TypeError: range() integer end argument expected, got str ;这不都说的很清楚了吗?


我无法理解你的问题。

加个 int 方法呗。

在 input()那里加么?

我在 input()那里加了,没用啊,这 2 版本的输入和 3 不一样啊……


我这里没问题

真是醉了,你知道 hiho 这网站么,我的提交通不过,我在电脑上也没问题……

讲道理 OJ 也应该支持 Python3 了……

话说楼主醒醒,你的代码里还有 raw_input ,这能在 Python3.5 里执行?

就算是 2 也应当知道 raw_input 拿到的是字符串吧?我有点怀疑这代码的来路

这是我改过的, 2 和 3 大的区别我还是知道的。我原来写的是 3.5 版本的,提交的时候发现是要 2 版本的,然后我就改成这个样子了,然后它网站就通不过, input()拿到的确实是字符串啊,我加 int()了,在 3 里面是没有 raw_input()的,而且我的问题是我能在本地运行,却不能在在线网站上提交通过, goodryb 也在 2 上帮我运行了,也是没有问题,我没有学过 2 所以我才请教大家,这哪里有问题……算法已经懂了,不行我就用 c++实现算了

只有 input 有问题。 2 里的 raw_input 等价于 3 的 input 。

其实这个代码从 3 到 2 是丝毫不用改的,因为 2 的 input ,就是一个只能读数字输出也是数字的东西。。。。

另外他不是帮你运行了!他改过了程序

#6 从结果来看,并没有提示什么编译错误
Time Limit Exceeded TLE 用户程序运行时间超过题目的限制

"因为 2 的 input ,就是一个只能读数字输出也是数字的东西"

可能你对 Python 2 中 input() 的理解是有偏差的… Python2 中 input() == eval(raw_input())

多谢了,这还能优化?

#14 应该可以吧,我看这个题目有 4000 左右的提交, 2000+通过

窝槽?还真是如此,学到了

>>> input()
(lambda x: dir())(1)
[‘x’]

不过这个函数已经多年不用,以后也难有机会了……


你把 range 改成 xrange 试试, 2 的 range 直接返回 list ,很慢。

这里一个 2 的坑就是 xrange 参数不能超过机器字长,大数字用不了。

用 Manacher 算法即可

说真的,这个 Manacher 看不太懂…

多谢,我改了再试试

回到顶部