สมมติว่าเรามีรายการสตริงที่เรียกว่าการโหวต โดยแต่ละรายการจะใช้อักษรตัวพิมพ์เล็กและเป็นการแทนการโหวตของผู้สมัครโดยเรียงจากความชอบสูงสุดไปต่ำสุด ที่นี่อันดับของผู้สมัครขึ้นอยู่กับจำนวนโหวตที่ได้รับตามความชอบสูงสุด ตอนนี้ถ้าเสมอกัน เราจะตรวจสอบจำนวนโหวตที่ได้รับในอันดับที่สูงกว่าอันดับถัดไป เป็นต้น หากยังคงมีความสัมพันธ์กันก็จะถูกจัดลำดับตามตัวอักษร เราจึงต้องค้นหาอันดับสุดท้ายของทีมโดยเรียงลำดับจากอันดับสูงสุดไปต่ำสุด
ดังนั้น หากอินพุตเป็นเหมือนเสียงโหวต =["zyx", "zxy", "xyz"] เอาต์พุตจะเป็น "zxy" เนื่องจาก z ได้รับการตั้งค่าสูงสุดเป็นจำนวนสูงสุด จึงเป็นอันดับแรก จากนั้น x ได้รับคะแนนความพึงพอใจสูงสุดเป็นอันดับสอง และ y ไม่ได้รับคะแนนโหวตความพึงพอใจสูงสุด
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- นับ :=ความยาวของสตริงในการโหวต
- cand :=แผนที่ว่างที่แต่ละคีย์จะเป็นรายการการนับขนาด และในขั้นต้นจะเต็มไปด้วย 0
- สำหรับแต่ละ v ในการโหวต ทำ
- สำหรับแต่ละดัชนี i และค่า c ใน v ทำ
- เพิ่มแคน[c, i] ขึ้น 1
- จัดเรียงรายการแคนตามลำดับจากมากไปหาน้อยตามมูลค่า เมื่อค่าเท่ากัน ให้จัดเรียงตามตัวอักษร
- ส่งกลับสตริงโดยเชื่อมองค์ประกอบที่เรียงลำดับแล้ว
- สำหรับแต่ละดัชนี i และค่า c ใน v ทำ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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