为什么程序中出现运行时错误?

时间:2018-05-12 09:44:32

标签: python testing palindrome

在HackerRank上的一个问题,其中要计算Palindrome子串的数量。

此程序运行良好,尝试使用不同的测试用例。

但是它没有通过HackerRank的最后两个测试用例。

我的程序无法成功执行的可能的测试用例可能是什么。

这是问题陈述。

它有1个参数:一个字符串,s。它必须返回一个整数,表示s的回文子串的数量。

约束

1≤| S | ≤5×(10)^ 3 s由小写英文字母组成。

输出格式

你的函数必须返回一个整数,表示s的不同回文子串的数量

def countPalindromes(s):
    counter=0
    length = len(s)
    list1= ([s[i:j+1] for i in range(length) for j in range(i,length)])
    list2=([x[::-1] for x in list1])
    for i in range(len(list2)):
        if(list1[i]==list2[i]):
            counter+=1
    return counter

#input = aaa
#output = 6 i.e. {a,a,a,aa,aa,aaa}
#input = abccba
#output = 9
#input = daata
#output = 7
#output is correct though failing the last 2 test cases

1 个答案:

答案 0 :(得分:0)

您可以使用RecursionMemoization来计算字符串中的回文子串数。例如:

def is_palindrome(s):
    return 1 if s == s[::-1] else 0


def count_palindromes(s, i, j, m):
    key = '{}-{}'.format(i, j)
    if key in m.keys():
        return m[key]
    if i == len(s)-1 or i > j:
        return 0
    m[key] = is_palindrome(s[i:j]) + count_palindromes(s, i+1, j, m) + count_palindromes(s, i, j-1, m)
    return m[key]


m = {}
print(count_palindromes('aaa', 0, 2, m)) # should be count_palindromes(s, 0, len(s)-1, m)
# output: 6