Find the winner of the game - GeeksforGeeks

19 Jan, 2022
Two players are playing a game where a string str is given. The first player can take the characters at even indices and the second player can take the characters at odd indices. The player which can build the lexicographically smaller string than the other player wins the game. Print the winner of the game, either player A, B or print Tie if its a tie.Examples:  
Input: str = “geeksforgeeks” Output: B “eeggoss” is the lexicographically smallest string that player A can get. “eefkkr” is the lexicographically smallest string that player B can get. And B’s string is lexicographically smaller.Input: str = “abcdbh” Output: A  
 
Approach: Create two empty strings str1 and str2 for player A and B respectively. Traverse the original string character by character and for every character whose index is even, append this character in str1 else append this character in str2. Finally sort the generated string in order to get the lexicographically smallest possible string and compare them to find the winner of the game.Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to find the winner of the gamevoid find_winner(string str, int n){     // To store the strings for both the players    string str1 = "", str2 = "";    for (int i = 0; i < n; i++) {         // If the index is even        if (i % 2 == 0) {             // Append the current character            // to player A's string            str1 += str[i];        }         // If the index is odd        else {             // Append the current character            // to player B's string            str2 += str[i];        }    }     // Sort both the strings to get    // the lexicographically smallest    // string possible    sort(str1.begin(), str1.end());    sort(str2.begin(), str2.end());     // Compare both the strings to    // find the winner of the game    if (str1 < str2)        cout << "A";    else if (str2 < str1)        cout << "B";    else        cout << "Tie";} // Driver codeint main(){    string str = "geeksforgeeks";    int n = str.length();     find_winner(str, n);     return 0;}
// Java implementation of the approachimport java.util.Arrays; class GFG{ // Function to find the winner of the gamestatic void find_winner(String str, int n){     // To store the strings for both the players    String str1 = "", str2 = "";    for (int i = 0; i < n; i++)    {         // If the index is even        if (i % 2 == 0)        {             // Append the current character            // to player A's string            str1 += str.charAt(i);        }         // If the index is odd        else        {             // Append the current character            // to player B's string            str2 += str.charAt(i);        }    }     // Sort both the strings to get    // the lexicographically smallest    // string possible    char a[] = str1.toCharArray();    Arrays.sort(a);    char b[] = str2.toCharArray();    Arrays.sort(b);    str1 = new String(a);    str2 = new String(b);     // Compare both the strings to    // find the winner of the game    if (str1.compareTo(str2) < 0)        System.out.print("A");    else if (str1.compareTo(str2) > 0)        System.out.print("B");    else        System.out.print("Tie");} // Driver codepublic static void main(String[] args){    String str = "geeksforgeeks";    int n = str.length();     find_winner(str, n);}} // This code is contributed by Rajput-Ji
# Python3 implementation of the approach # Function to find the winner of the gamedef find_winner(string, n) :     # To store the strings for both the players    string1= ""; string2 = "";    for i in range(n) :         # If the index is even        if (i % 2 == 0) :             # Append the current character            # to player A's string            string1 += string[i];                 # If the index is odd        else :                         # Append the current character            # to player B's string            string2 += string[i];                 # Sort both the strings to get    # the lexicographically smallest    # string possible    string1 = "".join(sorted(string1))    string2 = "".join(sorted(string2))         # Compare both the strings to    # find the winner of the game    if (string1 < string2) :        print("A", end = "");             elif (string2 < string1) :        print("B", end = "");             else :        print("Tie", end = ""); # Driver codeif __name__ == "__main__" :     string = "geeksforgeeks";    n = len(string);     find_winner(string, n); # This code is contributed by AnkitRai01
// C# implementation of the approachusing System; class GFG{ // Function to find the winner of the gamestatic void find_winner(String str, int n){     // To store the strings for both the players    String str1 = "", str2 = "";    for (int i = 0; i < n; i++)    {         // If the index is even        if (i % 2 == 0)        {             // Append the current character            // to player A's string            str1 += str[i];        }         // If the index is odd        else        {             // Append the current character            // to player B's string            str2 += str[i];        }    }     // Sort both the strings to get    // the lexicographically smallest    // string possible    char []a = str1.ToCharArray();    Array.Sort(a);    char []b = str2.ToCharArray();    Array.Sort(b);    str1 = new String(a);    str2 = new String(b);     // Compare both the strings to    // find the winner of the game    if (str1.CompareTo(str2) < 0)        Console.Write("A");    else if (str1.CompareTo(str2) > 0)        Console.Write("B");    else        Console.Write("Tie");} // Driver codepublic static void Main(String[] args){    String str = "geeksforgeeks";    int n = str.Length;     find_winner(str, n);}} // This code is contributed by Rajput-Ji
<script> // Javascript implementation of the approach // Function to find the winner of the gamefunction find_winner(str, n){     // To store the strings for both the players    var str1 = "", str2 = "";    for (var i = 0; i < n; i++) {         // If the index is even        if (i % 2 == 0) {             // Append the current character            // to player A's string            str1 += str[i];        }         // If the index is odd        else {             // Append the current character            // to player B's string            str2 += str[i];        }    }     // Sort both the strings to get    // the lexicographically smallest    // string possible    str1 = str1.split('').sort();    str2 = str2.split('').sort();     // Compare both the strings to    // find the winner of the game    if (str1 < str2)        document.write( "A");    else if (str2 < str1)        document.write( "B");    else        document.write( "Tie");} // Driver codevar str = "geeksforgeeks";var n = str.length;find_winner(str, n); </script>
B
 
ankthon
Rajput-Ji
rutvik_56
surinderdawra388
varshagumber28
lexicographic-ordering
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Python program to check if a string is palindrome or not
Different methods to reverse a string in C/C++
KMP Algorithm for Pattern Searching
Check for Balanced Brackets in an expression (well-formedness) using Stack
Convert string to char array in C++
Longest Palindromic Substring | Set 1
Caesar Cipher in Cryptography
Reverse words in a given string
Array of Strings in C++ (5 Different Ways to Create)
Top 50 String Coding Problems for Interviews