Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ค้นหาจำนวนสตริงย่อย palindromic ของสตริงในรูปแบบการเรียงลำดับในPython


สมมติว่าเรามีสตริงของอักขระตัวพิมพ์เล็ก (ทั้งหมดเป็นอักขระ ASCII) เราจะต้องค้นหาสตริงย่อย palindromic ที่ต่อเนื่องกันที่แตกต่างกันทั้งหมดของสตริงที่กำหนด

ดังนั้น หากอินพุตเป็นเหมือน "ระดับ" ผลลัพธ์จะเป็น 7 เนื่องจากมีสตริงย่อยเจ็ดรายการ ['ระดับ', 'อีฟ', 'l', 'e', ​​'v', 'e', ​​'l' ].

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ไม่ :=26

  • n :=ความยาวของ str

  • ผลรวม :=0

  • my_map :=รายการขนาด N และเติมด้วย 0

  • สำหรับผมอยู่ในช่วง 0 ถึง n ทำ

    • my_map[ASCII ของ (str[i]) - ASCII ของ ('a') ] :=my_map[ASCII ของ (str[i]) - ASCII ของ ('a') ] + 1

  • สำหรับผมอยู่ในช่วง 0 ถึง N ทำ

    • ถ้า my_map[i] ไม่ใช่ศูนย์ ดังนั้น

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

  • ผลตอบแทนรวม

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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