首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找移除元素字符串时成为回文的索引。

查找移除元素字符串时成为回文的索引。
EN

Stack Overflow用户
提问于 2016-04-11 04:50:58
回答 2查看 968关注 0票数 1

我正在编写这个HackerRank问题的解决方案-- https://www.hackerrank.com/challenges/palindrome-index

我试过这段代码:

代码语言:javascript
运行
复制
T = int(raw_input())

for t in xrange(T):
    s = raw_input()
    index = -1
    if s != s[::-1]:
        for i in xrange(len(s)):
            temp = s[:i:] + s[i+1::]
            if temp == temp[::-1]:
                index = i
                break
    print index

但是当我提交它时,在14个测试用例中,大约8个需要很长时间来计算(大约5-7秒),其中一个需要超过10秒,所以HackerRank甚至没有显示结果(它是否给出了正确的输出)。看来我的代码效率很低。请帮我使它跑得更快。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-11 05:13:12

加快代码速度的最简单方法是删除每个索引的切片,以防该字符串不是回文。如果字符串的最大长度不是回文,下面的行将生成超过200000片:temp = s[:i:] + s[i+1::]

您可以从开始和开始检查字符串,直到发现差异为止。一旦找到,您就可以生成已删除第一个或最后一个字母的片,并检查这是否是回文。如果您删除了第一个字符和结果不是回文,您知道最后一个字符是正确的解决方案,因为问题语句保证:

代码语言:javascript
运行
复制
T = int(raw_input())

for t in xrange(T):
    s = raw_input()
    length = len(s)
    for i in xrange(length / 2):
        if s[i] != s[length - i - 1]:
            if s[i + 1:length - i] == s[length - i - 1:i:-1]:
                print i
            else:
                print length - i - 1
            break
    else:
        print -1
票数 3
EN

Stack Overflow用户

发布于 2016-04-11 05:17:08

最有效的办法是从左右双方检查,并打破不平等:

代码语言:javascript
运行
复制
for i in range(int(input())):
    s=input()
    if s==s[::-1]:
        print(-1)
    else:
        for i in range(int(len(s)/2)):
            if s[i]!=s[len(s)-1-i]:
                print(i if ((s[:i]+s[i+1:])==(s[:i]+s[i+1:])[::-1]) else len(s)-1-i)
                break

显然,我也是那个站点的成员,执行我的代码,它以0.01s和0.02s通过所有测试用例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36540068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档