ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมหาและจัดกลุ่ม anagram โดยใช้ List และ Dictionary
อัลกอริทึม
1. กำหนด list ของสตริง 2. สร้าง dictionary ว่าง 3. วนลูปผ่าน list: 3.1 เรียงตัวอักษรในสตริง (sorted) เป็น key 3.2 ถ้า key อยู่ใน dict แล้ว → append สตริงต้นฉบับ 3.3 ถ้ายังไม่มี → สร้าง key ใหม่กับ list ว่าง แล้ว append 4. รวมค่าทั้งหมดใน dictionary เป็นสตริงเดียว 5. พิมพ์ผลลัพธ์
โค้ดตัวอย่าง
strings = ["apple", "orange", "grapes", "pear", "peach"]
anagrams = {}
for string in strings:
key = "".join(sorted(string))
if key in anagrams:
anagrams[key].append(string)
else:
anagrams[key] = [string]
result = ""
for key, value in anagrams.items():
result += " ".join(value) + " "
print(result)ผลลัพธ์
apple orange grapes pear peach
หมายเหตุ: ในตัวอย่างนี้ ไม่มีคำที่เป็น anagram กันจริง (ไม่มีคำที่ตัวอักษรเหมือนกันหมด) ดังนั้นแต่ละคำอยู่กลุ่มละคำ
ตัวอย่างที่มี Anagram จริง
strings = ["listen", "silent", "enlist", "hello", "world"]
anagrams = {}
for string in strings:
key = "".join(sorted(string))
if key in anagrams:
anagrams[key].append(string)
else:
anagrams[key] = [string]
for key, group in anagrams.items():
if len(group) > 1:
print(f"Anagram group: {group}")ผลลัพธ์
Anagram group: ['listen', 'silent', 'enlist']
สรุป
เทคนิคนี้ใช้ sorted string เป็น key ใน dictionary เพื่อจัดกลุ่ม anagram ได้อย่างมีประสิทธิภาพ O(n * k log k) โดย n = จำนวนคำ, k = ความยาวคำ หากมีข้อสงสัย สามารถถามได้ในส่วนความคิดเห็น