เมื่อสตริงสองตัวมีตัวอักษรเหมือนกันแต่เรียงลำดับต่างกัน เราเรียกว่าเป็น Anagram (คำทับศัพท์) ตัวอย่างเช่น spot และ post เป็น anagram เพราะมีตัวอักษรเหมือนกันแต่สร้างคำต่างกัน ในบทความนี้ เราจะดูว่าจะตรวจสอบได้อย่างไรว่าสตริงสองตัวเป็น anagram ของกันหรือไม่
สำหรับสิ่งนี้ เราใช้โมดูล python ที่ชื่อ collections โมดูลเหล่านี้ใช้เก็บคอลเลกชันของข้อมูล เช่น list, dict, set, tuple เป็นต้น นี่เป็นตัวอย่างของ built-in collections ฟังก์ชัน counter() เพียงแค่นับจำนวนครั้งที่องค์ประกอบปรากฏในคอลเลกชันและคืนค่าผลลัพธ์เป็น dictionary แสดงองค์ประกอบและจำนวนนับ ดังนั้น หากสตริงสองตัวมีจำนวนนับของแต่ละตัวอักษรที่ตรงกัน เราจะถือว่าเป็น anagram
ตัวอย่าง
from collections import Counter
StringA = 'top spot'
StringB = 'pot post'
# พิมพ์องค์ประกอบเป็น dictionary
print(Counter(StringA))
print(Counter(StringB))
# เปรียบเทียบ dictionary
if Counter(StringA) == Counter(StringB):
print('StringA and StringB are Anagrams')
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้:
Counter({'p': 2, 't': 2, 'o': 2, 's': 1, ' ': 1})
Counter({'p': 2, 't': 2, 'o': 2, 's': 1, ' ': 1})
StringA and StringB are Anagrams