[英]Count the number of Substrings which are Palindromes
我目前正在嘗試解決Hackerreank上出現的編程問題(鏈接在這里-> https://www.hackerrank.com/challenges/count-palindromes )。
該問題將字符串定義為小寫字符(a到z)
K是我提供的輸入數字
我應該找到包含K回文子字符串的最小字符串(上面的定義)。 (回文序列是一個序列,當顛倒時將給出相同的序列)。
好的,這很有道理。 現在,這是我的方法
假設我有一個字符串“ aaaa”,它具有10個形式為a,a,a,a aa,aa,aa aaa,aaa aaaa的回文子字符串。 (由於不同索引處的字符被認為是唯一的。)
因此,如果給定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,如果(N * N + 1)/ 2等於K,則N是答案。
現在樣本案例輸入K為17
但是N * N + 1/2永遠不會給出N(自然數)
誰能告訴我我的方法有什么錯誤。 感謝所有幫助:)並為長期的問題感到抱歉
PS:我真的不需要解決這個問題,我只想弄清楚我的算法有什么問題
您的總和的公式既不是(N * N + 1)/ 2也不是N * N + 1 /2。正確的公式是(N *(N + 1))/ 2。 這始終是自然數,因為N或(N + 1)是偶數。 因此,(N *(N + 1))是偶數,(N *(N + 1))/ 2是自然數。
您的方法是錯誤的,因為您正在嘗試計算字符串中所有子字符串的數量。 “假設子字符串的長度為N,如果它包含所有相同的字符,我將獲得N的最小可能值”。 這就是錯誤所在。 由於分布N *(N + 1)/ 2並不涵蓋整個自然數系統集,因此他們可能會詢問多個K值,而您無法對其進行覆蓋。 這樣的值是17。
aaaa -> it has 10 palindrome substrings.
aaaaa -> it has 15 palindrome substrings.
aaaaaa -> it has 21 palindrome substrings.
如您所見,回文子字符串的數量從N = 5的15個躍升到N = 6的21個。因此,像僅具有一個字符的字符串可能無法准確地表示17個回文子字符串。
但是,如果您巧妙地適當添加另一個字母(或幾個字母),則可以更改這種情況。 例如
aaaaabb -> it has 18 palindrome substrings. ( Added b,b,bb)
希望它能給您一些指示。 我自己還沒有弄清楚答案,但是我認為訣竅在於將字母添加到一個字符的原始字符串中,因為上面的示例(順便說一句)也使用了最小字符串。
另一個例子:
aaaaabbc -> (minimum ?) string that has EXACTLY 19 palindrome substrings.
G00d運氣:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.