【发布时间】:2015-01-05 06:59:25
【问题描述】:
我目前正在尝试解决 Hackerreank 上的一个编程问题(链接在这里 -> https://www.hackerrank.com/challenges/count-palindromes)。
问题将字符串定义为由小写字符(a 到 z)组成
K 是我作为输入提供的数字
我应该找到包含 K 个回文子串的最小字符串(上面的定义)。 (回文是一个序列,当反转时会给出相同的序列)。
好的,这是有道理的。现在,这是我的方法
假设我有一个字符串“aaaa”,它有 10 个回文子串的形式 一个,一个,一个,一个 啊啊啊啊啊啊 啊啊啊啊 啊啊啊 (因为不同索引的字符被认为是唯一的。)
所以如果 K 被给定为 10,那么具有 10 个回文子串的字符串的最小长度是 4。因此答案是 4(这个细节也可以在链接上找到)
现在我有一种方法可以解决这个问题,但它并没有给我正确的结果。
假设子串长度为N,如果它包含所有相同的字符,我将获得N的最小可能值
如果我假设这个,那么数量:
大小 1 回文子串 = N
大小为 2 的回文子串 = N-1
大小为 3 的回文子串 = N-2
..
..
..
大小 N 回文子串 = 1
使用此代码可以计算回文子串的数量
index = N
total = 0
while N > 0:
total += N
N-=1
一步一步,这段代码只是计算从1到N的自然数之和
因此 (N * N+1) / 2 是一个数字可以拥有的回文子串的数量。因此对于一个特定的 N,is (N * N+1) / 2 等于 K,那么 N 就是答案。
现在一个样例输入 K 是 17
但是 N * N+1 / 2 永远不会给出 N(自然数)
谁能告诉我方法中的错误是什么。感谢所有帮助:) 很抱歉这个长问题
P.S : 我真的不需要解决这个问题,我只是想弄清楚我的算法出了什么问题
【问题讨论】:
标签: python string algorithm palindrome