# 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:

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.

```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 ``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 st = ``new` `Stack();` `    ``// 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

 ``
Output:
`B`

My Personal Notes arrow_drop_up