สมมติว่าเรามีสตริงของอักขระตัวพิมพ์เล็ก (ทั้งหมดเป็นอักขระ 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