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

นับสตริงย่อยพาลินโดรมที่แตกต่างกันในรูปแบบเรียงลำดับใน Python

สมมติว่าเรามีสตริงตัวพิมพ์เล็ก ต้องการนับสตริงย่อยพาลินโดรมที่ต่อเนื่องและแตกต่างกันทั้งหมด

เช่น "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