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

ตรวจสอบว่าครึ่งหนึ่งของสตริงมีชุดตัวอักษรเหมือนกันหรือไม่ใน Python

เราต้องตรวจสอบว่าสองครึ่งของสตริงมีชุดตัวอักษร (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 กว่า เลือกใช้ตามบริบท หากมีข้อสงสัย สามารถถามได้ในส่วนความคิดเห็น