在 Python 中查詢字串排序形式的迴文子串計數


假設我們有一個小寫字元的字串(全是 ASCII 字元),我們需要找到給定字串的所有不同的連續迴文子串。

所以,如果輸入是“level”,那麼輸出將是 7,因為有七個子串 ['level', 'eve', 'l', 'e', 'v', 'e', 'l']。

為了解決這個問題,我們將遵循以下步驟:

  • N := 26

  • n := 字串長度

  • sum := 0

  • my_map := 一個大小為 N 的列表,並填充 0

  • 對於 i 從 0 到 n,執行:

    • my_map[str[i] 的 ASCII 值 - 'a' 的 ASCII 值] := my_map[str[i] 的 ASCII 值 - 'a' 的 ASCII 值] + 1

  • 對於 i 從 0 到 N,執行:

    • 如果 my_map[i] 非零,則

      • sum := sum + (my_map[i] * (my_map[i] + 1) / 2)

  • 返回 sum

示例

讓我們看看下面的實現,以便更好地理解:

線上演示

N = 26
def all_palindrome_substr_count(str):
   n = len (str)
   sum = 0
   my_map = [0] * N
   for i in range(n):
      my_map[ord(str[i]) - ord('a')] += 1
  for i in range(N) :
      if (my_map[i]):
         sum += (my_map[i] * (my_map[i] + 1) // 2)
   return sum
str = "level"
print (all_palindrome_substr_count(str))

輸入

"level"

輸出

7

更新於:2020-08-19

158 次瀏覽

開始您的職業生涯

完成課程獲得認證

開始
廣告