เราต้องตรวจสอบว่าสองครึ่งของสตริงมีชุดตัวอักษร (character set) เหมือนกันหรือไม่ โดยความถี่ (frequency) ของตัวอักษรในแต่ละครึ่งต้องเหมือนกันทุกประการ ถ้าความยาวสตริงเป็นคี่ ให้ละตัวกลางไว้
อัลกอริทึม
1. กำหนดสตริง 2. สร้าง dictionary ว่าง alphabets 3. คำนวณ mid = len(string) // 2 4. วนลูปครึ่งแรก (0 ถึง mid-1): นับความถี่ตัวอักษรใน dictionary 5. วนลูปครึ่งหลัง (mid ถึงสิ้นสุด): ลดความถี่ตัวอักษรใน dictionary 6. ตรวจสอบ dictionary: ถ้าค่าใดไม่เป็น 0 → ไม่ตรงกัน (No!) มิฉะนั้น → ตรงกัน (Yes!)
โค้ดตัวอย่าง
string = "aabccbaa"
alphabets = {}
mid = len(string) // 2
# นับความถี่ครึ่งแรก
for i in range(mid):
if not alphabets.get(string[i], 0):
alphabets[string[i]] = 1
else:
alphabets[string[i]] += 1
# ลดความถี่ครึ่งหลัง
for i in range(len(string) - 1, mid - 1, -1):
if alphabets.get(string[i], 0):
alphabets[string[i]] -= 1
# ตรวจสอบ
flag = 1
for count in alphabets.values():
if count != 0:
print("No!")
flag = 0
break
if flag == 1:
print("Yes!")ผลลัพธ์
Yes!
วิธี替代 (Alternative) ด้วย Counter
from collections import Counter
string = "aabccbaa"
mid = len(string) // 2
first_half = Counter(string[:mid])
second_half = Counter(string[mid:])
print("Yes!" if first_half == second_half else "No!")สรุป
วิธี dictionary แบบ manual ให้ความเข้าใจพื้นฐาน วิธี Counter สั้นและ Pythonic กว่า เลือกใช้ตามบริบท หากมีข้อสงสัย สามารถถามได้ในส่วนความคิดเห็น