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

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
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 tack 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 `

Output:

```B
```

My Personal Notes arrow_drop_up If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.