Giả sử chúng ta có một danh sách các chuỗi được gọi là phiếu bầu, ở đây mỗi mục nhập bằng chữ thường và chúng đại diện cho phiếu bầu cho các ứng cử viên theo thứ tự từ ưu tiên cao nhất đến thấp nhất. Ở đây, thứ hạng của một ứng cử viên trước hết phụ thuộc vào số phiếu bầu nhận được về ưu tiên cao nhất. Bây giờ nếu có ràng buộc, chúng tôi sẽ kiểm tra số phiếu nhận được về ưu tiên cao nhất tiếp theo, v.v. Nếu vẫn còn ràng buộc, thì chúng sẽ được xếp theo thứ tự bảng chữ cái. Vì vậy, chúng tôi phải tìm thứ hạng cuối cùng của các đội theo thứ tự từ xếp hạng cao nhất đến thấp nhất.
Vì vậy, nếu đầu vào giống như phiếu bầu =["zyx", "zxy", "xyz"], thì đầu ra sẽ là "zxy", vì z nhận được nhiều ưu tiên cao nhất, vì vậy nó được xếp hạng đầu tiên. Sau đó, x nhận được số phiếu ưu tiên cao thứ hai và y không nhận được bất kỳ phiếu ưu tiên cao nhất nào.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- count:=độ dài của chuỗi trong phiếu bầu
- cand:=một bản đồ trống trong đó mỗi phím sẽ là một danh sách số lượng kích thước và ban đầu chúng được điền bằng 0
- đối với mỗi v trong phiếu bầu, thực hiện
- đối với mỗi chỉ số i và giá trị c trong v, thực hiện
- tăng cand [c, i] thêm 1
- sắp xếp các mục cand theo thứ tự giảm dần dựa trên giá trị, khi các giá trị giống nhau, hãy sắp xếp chúng theo thứ tự bảng chữ cái
- trả về một chuỗi bằng cách nối các phần tử đã sắp xếp.
- đối với mỗi chỉ số i và giá trị c trong v, thực hiện
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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