मान लीजिए हमारे पास votes नामक स्ट्रिंग्स की एक सूची है, यहां प्रत्येक प्रविष्टि लोअरकेस अक्षरों में है और वे उम्मीदवारों पर वोट को उच्चतम से निम्नतम वरीयता के क्रम में दर्शाते हैं। यहां एक उम्मीदवार की रैंक पहले उच्चतम वरीयता पर प्राप्त वोटों की संख्या पर निर्भर करती है। अब यदि टाई हैं, तो हम अगली उच्चतम वरीयता पर प्राप्त वोटों की संख्या की जांच करेंगे, और इसी तरह। यदि अभी भी टाई हैं, तो उन्हें वर्णानुक्रम में रैंक किया जाएगा। इसलिए हमें उच्चतम से निम्नतम रैंक के क्रम में टीमों की अंतिम रैंकिंग ढूंढनी है।
उदाहरण के लिए, यदि इनपुट votes = ["zyx", "zxy", "xyz"] है, तो आउटपुट "zxy" होगा, क्योंकि z को उच्चतम वरीयता पर सबसे अधिक वोट मिले, इसलिए यह पहले स्थान पर है। फिर x को दूसरी सबसे अधिक उच्चतम वरीयता के वोट मिले, और y को कोई उच्चतम वरीयता वोट नहीं मिला।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- count := votes में स्ट्रिंग्स की लंबाई
- cand := एक खाली मैप जहां प्रत्येक कुंजी count आकार की सूची होगी, और प्रारंभ में वे 0 से भरी होंगी
- प्रत्येक v के लिए votes में, करें
- प्रत्येक इंडेक्स i और मान c के लिए v में, करें
- cand[c, i] को 1 से बढ़ाएं
- cand आइटम्स को मान के आधार पर अवरोही क्रम में क्रमबद्ध करें, जब मान समान हों, तो उन्हें वर्णानुक्रम में क्रमबद्ध करें
- क्रमबद्ध तत्वों को जोड़कर एक स्ट्रिंग लौटाएं।
- प्रत्येक इंडेक्स 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