สมมติว่าเรามีสตริงตัวพิมพ์เล็ก ต้องการนับสตริงย่อยพาลินโดรมที่ต่อเนื่องและแตกต่างกันทั้งหมด
เช่น "level" ผลลัพธ์คือ 7 (level, eve, l, e, v, e, l)
ขั้นตอนการแก้ปัญหา (คณิตศาสตร์)
สตริงย่อยพาลินโดรมที่ต่อเนื่องและแตกต่างกันจะต้องประกอบด้วยตัวอักษรเดียวกันทั้งหมด ดังนั้นสำหรับแต่ละตัวอักษรที่ปรากฏ f ครั้ง จะมีสตริงย่อยพาลินโดรม f(f+1)/2 ตัว รวมทั้งหมดคือผลรวมสำหรับทุกตัวอักษร
ตัวอย่างโค้ด Python
N = 26
def all_palindrome_substr_count(s):
n = len(s)
total = 0
freq = [0] * N
for ch in s:
freq[ord(ch) - ord('a')] += 1
for f in freq:
if f:
total += f * (f + 1) // 2
return total
s = "level"
print(all_palindrome_substr_count(s))
อินพุต
"level"
เอาต์พุต
7