V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
hsqzs1996
V2EX  ›  Python

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

  •  
  •   hsqzs1996 · 2017-02-28 21:29:20 +08:00 · 2262 次点击
    这是一个创建于 2612 天前的主题,其中的信息可能已经有所发展或是发生改变。

    错误:

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

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

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

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

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

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

    可能你对 Python 2 中 input() 的理解是有偏差的... Python2 中 input() == eval(raw_input())
    hsqzs1996
        14
    hsqzs1996  
    OP
       2017-03-01 11:59:49 +08:00 via iPhone
    @goodryb 多谢了,这还能优化?
    goodryb
        15
    goodryb  
       2017-03-01 12:56:44 +08:00
    @hsqzs1996 #14 应该可以吧,我看这个题目有 4000 左右的提交, 2000+通过
    fy
        16
    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
        17
    sengxian  
       2017-03-01 19:13:27 +08:00
    @hsqzs1996 用 Manacher 算法即可
    hsqzs1996
        18
    hsqzs1996  
    OP
       2017-03-01 22:19:01 +08:00
    @sengxian 说真的,这个 Manacher 看不太懂.......
    hsqzs1996
        19
    hsqzs1996  
    OP
       2017-03-01 22:19:52 +08:00
    @fy 多谢,我改了再试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4001 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:17 · PVG 18:17 · LAX 03:17 · JFK 06:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.