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

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

Check out this Author's contributed articles.

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.

Article Tags :
Practice Tags :