簡體   English   中英

計算屬於回文的子串的數量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM