สมมติว่าเรามีชื่อบริษัทเป็นสตริง เราต้องหาตัวอักษรที่พบบ่อยที่สุด 3 ตัว และแสดงตามกฎ:
- เลือกตัวอักษรที่มีความถี่มากที่สุด 3 อันดับ
- จัดเรียงตามความถี่มากไปน้อย
- ถ้าความถี่เท่ากัน เรียงตามลำดับตัวอักษร
ตัวอย่างเช่น หาก s = "TUTORIALSPOINT" ผลลัพธ์จะเป็น [[3, 'T'], [2, 'I'], [2, 'O']]
ขั้นตอนการแก้ปัญหา
- x := map ที่เก็บตัวอักษรและความถี่ใน s (ใช้ Counter)
- res := รายการใหม่
- สำหรับแต่ละ i ใน x: เพิ่มคู่ (x[i], i) เข้าไปใน res
- res := เรียงตามตัวอักษร (key=lambda cnt: cnt[1])
- res := เรียงตามความถี่มากไปน้อย (key=lambda cnt: cnt[0], reverse=True)
- คืนค่า 3 รายการแรกจาก res
ตัวอย่างโค้ด
from collections import Counter
def solve(s):
x = Counter(s)
res = []
for i in x:
res.append([x[i], i])
res = sorted(res, key=lambda cnt: cnt[1])
res = sorted(res, key=lambda cnt: cnt[0], reverse=True)
return res[:3]
s = "TUTORIALSPOINT"
print(solve(s))
อินพุต
"TUTORIALSPOINT"
เอาต์พุต
[[3, 'T'], [2, 'I'], [2, 'O']]