มีรายการคะแนนเสียง votes แต่ละรายการเป็นสตริงตัวอักษรพิมพ์เล็ก แสดงลำดับความชอบ อันดับขึ้นอยู่กับจำนวนคะแนนเสียงอันดับ 1 ถ้าเท่ากันดูอันดับ 2 ต่อไป ถ้ายังเท่ากัน เรียงตามตัวอักษร
เช่น votes = ["zyx","zxy","xyz"] ให้ "zxy" เพราะ z ได้อันดับ 1 มากที่สุด
ขั้นตอนการแก้ปัญหา
count := ความยาวสตริงใน votescand := dict เริ่มต้น list ขนาด count เติม 0- นับคะแนนแต่ละตำแหน่งสำหรับแต่ละผู้สมัคร
- เรียงผู้สมัครตามคะแนน (มากไปน้อย) แล้วตามตัวอักษร
- รวมเป็นสตริงคืนค่า
ตัวอย่างโค้ด
from collections import defaultdict
class Solution:
def solve(self, votes):
count = len(votes[0])
cand = defaultdict(lambda: [0]*count)
for v in votes:
for i,c in enumerate(v):
cand[c][i] += 1
return "".join(sorted(cand.keys(), key=lambda x: (cand[x], -ord(x)), reverse=True))
ob = Solution()
votes = ["zyx","zxy","xyz"]
print(ob.solve(votes))
อินพุต
["zyx","zxy","xyz"]
เอาต์พุต
zxy