Skip to content
Related Articles

Related Articles

Improve Article

Find the winner of the Game to Win by erasing any two consecutive similar alphabets

  • Difficulty Level : Medium
  • Last Updated : 02 Jun, 2021

Given a string consisting of lower case alphabets.
Rules of the Game: 
 

  • A player can choose a pair of similar consecutive characters and erase them.
  • There are two players playing the game, the player who makes the last move wins.

The task is to find the winner if A goes first and both play optimally. 
Examples: 
 

Input: str = "kaak" 
Output: B
Explanation:
    Initial String: "kaak"
    A's turn:
        removes: "aa"
        Remaining String: "kk"
    B's turn:
        removes: "kk"
        Remaining String: ""
    Since B was the last one to play
    B is the winner.

Input: str = "kk"
Output: A

 

Approach: We can use a stack to simplify the problem. 
 

  • Each time we encounter a character that is different from the one present in the top of the stack we add it to the stack.
  • If the stack top and the next character match we pop the character from the stack and increment the count.
  • At the end, we just need to see who wins by checking count%2.

Below is the implementation of the above approach: 
 



C++




#include <bits/stdc++.h>
using namespace std;
 
// Function to play the game
// and find the winner
void findWinner(string s)
{
    int i, count = 0, n;
    n = s.length();
    stack<char> st;
 
    // ckecking the top of the stack with
    // the i th character of the string
    // add it to the stack if they are different
    // otherwise increment count
    for (i = 0; i < n; i++) {
        if (st.empty() || st.top() != s[i]) {
            st.push(s[i]);
        }
        else {
            count++;
            st.pop();
        }
    }
 
    // Check who has won
    if (count % 2 == 0) {
        cout << "B" << endl;
    }
    else {
        cout << "A" << endl;
    }
}
 
// Driver code
int main()
{
    string s = "kaak";
 
    findWinner(s);
 
    return 0;
}

Java




// Java implementation for above approach
import java.util.*;
 
class GFG
{
 
// Function to play the game
// and find the winner
static void findWinner(String s)
{
    int i, count = 0, n;
    n = s.length();
    Stack<Character> st = new Stack<Character>();
 
    // ckecking the top of the stack with
    // the i th character of the string
    // add it to the stack if they are different
    // otherwise increment count
    for (i = 0; i < n; i++)
    {
        if (st.isEmpty() ||
            st.peek() != s.charAt(i))
        {
            st.push(s.charAt(i));
        }
        else
        {
            count++;
            st.pop();
        }
    }
 
    // Check who has won
    if (count % 2 == 0)
    {
        System.out.println("B");
    }
    else
    {
        System.out.println("A");
    }
}
 
// Driver code
public static void main(String[] args)
{
    String s = "kaak";
 
    findWinner(s);
}
}
 
// This code is contributed by Rajput-Ji

Python3




# Python3 implementation of the approach
 
# Function to play the game
# and find the winner
def findWinner(s) :
 
    count = 0
    n = len(s);
    st = [];
 
    # ckecking the top of the stack with
    # the i th character of the string
    # add it to the stack if they are different
    # otherwise increment count
    for i in range(n) :
        if (len(st) == 0 or st[-1] != s[i]) :
            st.append(s[i]);
             
        else :
            count += 1;
            st.pop();
 
    # Check who has won
    if (count % 2 == 0) :
        print("B");
     
    else :
        print("A");
         
# Driver code
if __name__ == "__main__" :
 
    s = "kaak";
 
    findWinner(s);
 
# This code is contributed by AnkitRai01

C#




// C# implementation for above approach
using System;
using System.Collections.Generic;
 
class GFG
{
 
// Function to play the game
// and find the winner
static void findWinner(String s)
{
    int i, count = 0, n;
    n = s.Length;
    Stack<char> st = new Stack<char>();
 
    // ckecking the top of the stack with
    // the i th character of the string
    // add it to the stack if they are different
    // otherwise increment count
    for (i = 0; i < n; i++)
    {
        if (st.Count == 0 ||
            st.Peek() != s[i])
        {
            st.Push(s[i]);
        }
        else
        {
            count++;
            st.Pop();
        }
    }
 
    // Check who has won
    if (count % 2 == 0)
    {
        Console.WriteLine("B");
    }
    else
    {
        Console.WriteLine("A");
    }
}
 
// Driver code
public static void Main(String[] args)
{
    String s = "kaak";
 
    findWinner(s);
}
}
 
// This code is contributed by 29AjayKumar

Javascript




<script>
    // Javascript implementation for above approach
     
    // Function to play the game
    // and find the winner
    function findWinner(s)
    {
        let i, count = 0, n;
        n = s.length;
        let st = [];
 
        // ckecking the top of the stack with
        // the i th character of the string
        // add it to the stack if they are different
        // otherwise increment count
        for (i = 0; i < n; i++)
        {
            if (st.length == 0 ||
                st[st.length - 1] != s[i])
            {
                st.push(s[i]);
            }
            else
            {
                count++;
                st.pop();
            }
        }
 
        // Check who has won
        if (count % 2 == 0)
        {
            document.write("B");
        }
        else
        {
            document.write("A");
        }
    }
     
    let s = "kaak";
   
    findWinner(s);
 
// This code is contributed by divyesh072019.
</script>
Output: 
B

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :