Find the winner of the Game to Win by erasing any two consecutive similar alphabets
Last Updated :
03 Aug, 2022
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;
void findWinner(string s)
{
int i, count = 0, n;
n = s.length();
stack< char > st;
for (i = 0; i < n; i++) {
if (st.empty() || st.top() != s[i]) {
st.push(s[i]);
}
else {
count++;
st.pop();
}
}
if (count % 2 == 0) {
cout << "B" << endl;
}
else {
cout << "A" << endl;
}
}
int main()
{
string s = "kaak" ;
findWinner(s);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static void findWinner(String s)
{
int i, count = 0 , n;
n = s.length();
Stack<Character> st = new Stack<Character>();
for (i = 0 ; i < n; i++)
{
if (st.isEmpty() ||
st.peek() != s.charAt(i))
{
st.push(s.charAt(i));
}
else
{
count++;
st.pop();
}
}
if (count % 2 == 0 )
{
System.out.println( "B" );
}
else
{
System.out.println( "A" );
}
}
public static void main(String[] args)
{
String s = "kaak" ;
findWinner(s);
}
}
|
Python3
def findWinner(s) :
count = 0
n = len (s);
st = [];
for i in range (n) :
if ( len (st) = = 0 or st[ - 1 ] ! = s[i]) :
st.append(s[i]);
else :
count + = 1 ;
st.pop();
if (count % 2 = = 0 ) :
print ( "B" );
else :
print ( "A" );
if __name__ = = "__main__" :
s = "kaak" ;
findWinner(s);
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static void findWinner(String s)
{
int i, count = 0, n;
n = s.Length;
Stack< char > st = new Stack< char >();
for (i = 0; i < n; i++)
{
if (st.Count == 0 ||
st.Peek() != s[i])
{
st.Push(s[i]);
}
else
{
count++;
st.Pop();
}
}
if (count % 2 == 0)
{
Console.WriteLine( "B" );
}
else
{
Console.WriteLine( "A" );
}
}
public static void Main(String[] args)
{
String s = "kaak" ;
findWinner(s);
}
}
|
Javascript
<script>
function findWinner(s)
{
let i, count = 0, n;
n = s.length;
let st = [];
for (i = 0; i < n; i++)
{
if (st.length == 0 ||
st[st.length - 1] != s[i])
{
st.push(s[i]);
}
else
{
count++;
st.pop();
}
}
if (count % 2 == 0)
{
document.write( "B" );
}
else
{
document.write( "A" );
}
}
let s = "kaak" ;
findWinner(s);
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(n)
Share your thoughts in the comments
Please Login to comment...