算法题目<最长回文子串>在我的电脑(python3.5)平台,运行正常但是在在线编译器中错误,求 dalao 帮我看看这个 N 该怎么改,多谢了.

2017-02-28 21:29:20 +08:00
 hsqzs1996

错误:

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]
2465 次点击
所在节点    Python
19 条回复
goodryb
2017-02-28 21:40:03 +08:00
TypeError: range() integer end argument expected, got str ;这不都说的很清楚了吗?
DeTamble
2017-02-28 21:41:54 +08:00
加个 int 方法呗。
hsqzs1996
2017-02-28 23:30:11 +08:00
@DeTamble 在 input()那里加么?
hsqzs1996
2017-02-28 23:31:28 +08:00
@goodryb 我在 input()那里加了,没用啊,这 2 版本的输入和 3 不一样啊……
goodryb
2017-02-28 23:45:58 +08:00

我这里没问题
hsqzs1996
2017-03-01 00:13:23 +08:00
@goodryb 真是醉了,你知道 hiho 这网站么,我的提交通不过,我在电脑上也没问题……
fy
2017-03-01 00:31:40 +08:00
讲道理 OJ 也应该支持 Python3 了……

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

就算是 2 也应当知道 raw_input 拿到的是字符串吧?我有点怀疑这代码的来路
hsqzs1996
2017-03-01 07:12:59 +08:00
@fy 这是我改过的, 2 和 3 大的区别我还是知道的。我原来写的是 3.5 版本的,提交的时候发现是要 2 版本的,然后我就改成这个样子了,然后它网站就通不过, input()拿到的确实是字符串啊,我加 int()了,在 3 里面是没有 raw_input()的,而且我的问题是我能在本地运行,却不能在在线网站上提交通过, goodryb 也在 2 上帮我运行了,也是没有问题,我没有学过 2 所以我才请教大家,这哪里有问题……算法已经懂了,不行我就用 c++实现算了
fy
2017-03-01 09:45:36 +08:00
@hsqzs1996 只有 input 有问题。 2 里的 raw_input 等价于 3 的 input 。

其实这个代码从 3 到 2 是丝毫不用改的,因为 2 的 input ,就是一个只能读数字输出也是数字的东西。。。。
fy
2017-03-01 09:46:45 +08:00
@hsqzs1996 另外他不是帮你运行了!他改过了程序
goodryb
2017-03-01 10:37:45 +08:00
@hsqzs1996 #6 如下

goodryb
2017-03-01 10:38:49 +08:00
@hsqzs1996 #6 从结果来看,并没有提示什么编译错误
Time Limit Exceeded TLE 用户程序运行时间超过题目的限制
yangtukun1412
2017-03-01 10:52:47 +08:00
@fy "因为 2 的 input ,就是一个只能读数字输出也是数字的东西"

可能你对 Python 2 中 input() 的理解是有偏差的... Python2 中 input() == eval(raw_input())
hsqzs1996
2017-03-01 11:59:49 +08:00
@goodryb 多谢了,这还能优化?
goodryb
2017-03-01 12:56:44 +08:00
@hsqzs1996 #14 应该可以吧,我看这个题目有 4000 左右的提交, 2000+通过
fy
2017-03-01 18:59:20 +08:00
@yangtukun1412 窝槽?还真是如此,学到了

>>> input()
(lambda x: dir())(1)
['x']

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


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

这里一个 2 的坑就是 xrange 参数不能超过机器字长,大数字用不了。
sengxian
2017-03-01 19:13:27 +08:00
@hsqzs1996 用 Manacher 算法即可
hsqzs1996
2017-03-01 22:19:01 +08:00
@sengxian 说真的,这个 Manacher 看不太懂.......
hsqzs1996
2017-03-01 22:19:52 +08:00
@fy 多谢,我改了再试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343895

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX