在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
答案 0 :(得分:0)
您可以使用Recursion和Memoization来计算字符串中的回文子串数。例如:
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