मान लीजिए हमारे पास छोटे अक्षरों की एक स्ट्रिंग S है। अब दो खिलाड़ी खेल खेल रहे हैं। नियम इस प्रकार हैं:
- खिलाड़ी खेल जीतता है यदि किसी चाल में वह स्ट्रिंग के वर्णों को फेरबदल करके पालिंड्रोम स्ट्रिंग प्राप्त कर सकता है।
- खिलाड़ी तब नहीं जीत सकता जब उसे स्ट्रिंग से कोई वर्ण हटाना पड़े।
हमें ध्यान रखना है कि दोनों खिलाड़ी इष्टतम खेलते हैं और खिलाड़ी 1 खेल शुरू करता है। हमें खेल का विजेता ढूंढना है।
इसलिए, यदि इनपुट "pqpppq" है, तो आउटपुट Player1 होगा क्योंकि खिलाड़ी-1 पहले चरण में वर्णों को व्यवस्थित करके "ppqqpp" प्राप्त करता है और खेल जीत जाता है।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
l := len(sequence)freq := [0] * 26iको 0 सेl-1तक:freq[ord(sequence[i]) - ord('a')] += 1count := 0iको 0 से 25 तक:- यदि
freq[i] % 2 != 0, तोcount += 1
- यदि
- यदि
count == 0याcountविषम है, तो 1 लौटाएं (खिलाड़ी 1 जीतता है)। - अन्यथा, 2 लौटाएं (खिलाड़ी 2 जीतता है)।
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
def who_is_the_winner(sequence):
l = len(sequence)
freq = [0 for i in range(26)]
for i in range(l):
freq[ord(sequence[i]) - ord('a')] += 1
count = 0
for i in range(26):
if freq[i] % 2 != 0:
count += 1
if count == 0 or count & 1 == 1:
return 1
else:
return 2
sequence = "pqpppq"
print("Player:", who_is_the_winner(sequence))
इनपुट
"pqpppq"
आउटपुट
Player: 1