Cho danh sách votes, mỗi chuỗi là thứ tự ưu tiên ứng cử viên (từ cao đến thấp). Xếp hạng: ưu tiên số phiếu ưu tiên 1, nếu hòa thì xem ưu tiên 2, v.v. Còn hòa thì theo thứ tự bảng chữ cái. Trả về chuỗi xếp hạng cuối cùng.
Ví dụ: votes = ["zyx", "zxy", "xyz"] → "zxy".
Giải thuật
- Đếm số phiếu mỗi ứng cử viên tại mỗi vị trí ưu tiên (
cand[c][i]). - Sắp xếp các ứng cử viên: giảm dần theo mảng đếm (so sánh lexicographic), nếu bằng nhau thì theo ký tự (giảm dần để 'z' trước 'a'?).
- Nối chuỗi kết quả.
Ví dụ minh họa
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))
Đầu vào
["zyx", "zxy", "xyz"]
Đầu ra
zxy