Created
May 2, 2025 12:03
-
-
Save SuryaPratapK/a3323409c8a7071a53763ae0a768e8bc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Domino { | |
public: | |
void doubleDominoPush(int last_R, int pos, string& dominoes) { | |
while (last_R < pos) { | |
dominoes[last_R++] = 'R'; | |
dominoes[pos--] = 'L'; | |
} | |
} | |
void leftDominoPush(int start, int end, string& dominoes) { | |
while (start <= end) | |
dominoes[start++] = 'L'; | |
} | |
void rightDominoPush(int last_R, int pos, string& dominoes) { | |
while (last_R <= pos) | |
dominoes[last_R++] = 'R'; | |
} | |
}; | |
class Solution { | |
public: | |
string pushDominoes(string dominoes) { | |
Domino newDomino; // Removed 'new' since we're not using pointers | |
int last_L = -1, last_R = -1; | |
int n = dominoes.size(); | |
for (int pos = 0; pos < n; pos++) { | |
if (dominoes[pos] == 'L') { | |
if (last_R > last_L) { | |
newDomino.doubleDominoPush(last_R, pos, dominoes); | |
} | |
else if ((last_L > last_R) || last_L == -1) { | |
newDomino.leftDominoPush(last_L + 1, pos, dominoes); | |
} | |
last_L = pos; | |
} | |
else if (dominoes[pos] == 'R') { | |
if (last_R > last_L) { | |
newDomino.rightDominoPush(last_R, pos, dominoes); | |
} | |
last_R = pos; | |
} | |
} | |
// Final case: (R)RR...R(end) | |
if (last_R > last_L) | |
newDomino.rightDominoPush(last_R, n - 1, dominoes); | |
return dominoes; | |
} | |
}; | |
/* | |
//JAVA | |
class Domino { | |
public void doubleDominoPush(int last_R, int pos, StringBuilder dominoes) { | |
while (last_R < pos) { | |
dominoes.setCharAt(last_R++, 'R'); | |
dominoes.setCharAt(pos--, 'L'); | |
} | |
} | |
public void leftDominoPush(int start, int end, StringBuilder dominoes) { | |
while (start <= end) { | |
dominoes.setCharAt(start++, 'L'); | |
} | |
} | |
public void rightDominoPush(int last_R, int pos, StringBuilder dominoes) { | |
while (last_R <= pos) { | |
dominoes.setCharAt(last_R++, 'R'); | |
} | |
} | |
} | |
class Solution { | |
public String pushDominoes(String dominoes) { | |
Domino newDomino = new Domino(); | |
int last_L = -1, last_R = -1; | |
int n = dominoes.length(); | |
StringBuilder sb = new StringBuilder(dominoes); | |
for (int pos = 0; pos < n; pos++) { | |
if (sb.charAt(pos) == 'L') { | |
if (last_R > last_L) { | |
newDomino.doubleDominoPush(last_R, pos, sb); | |
} | |
else if ((last_L > last_R) || last_L == -1) { | |
newDomino.leftDominoPush(last_L + 1, pos, sb); | |
} | |
last_L = pos; | |
} | |
else if (sb.charAt(pos) == 'R') { | |
if (last_R > last_L) { | |
newDomino.rightDominoPush(last_R, pos, sb); | |
} | |
last_R = pos; | |
} | |
} | |
// Final case: (R)RR...R(end) | |
if (last_R > last_L) { | |
newDomino.rightDominoPush(last_R, n - 1, sb); | |
} | |
return sb.toString(); | |
} | |
} | |
#Python | |
class Domino: | |
def doubleDominoPush(self, last_R, pos, dominoes): | |
dominoes_list = list(dominoes) | |
while last_R < pos: | |
dominoes_list[last_R] = 'R' | |
dominoes_list[pos] = 'L' | |
last_R += 1 | |
pos -= 1 | |
return ''.join(dominoes_list) | |
def leftDominoPush(self, start, end, dominoes): | |
dominoes_list = list(dominoes) | |
while start <= end: | |
dominoes_list[start] = 'L' | |
start += 1 | |
return ''.join(dominoes_list) | |
def rightDominoPush(self, last_R, pos, dominoes): | |
dominoes_list = list(dominoes) | |
while last_R <= pos: | |
dominoes_list[last_R] = 'R' | |
last_R += 1 | |
return ''.join(dominoes_list) | |
class Solution: | |
def pushDominoes(self, dominoes: str) -> str: | |
newDomino = Domino() | |
last_L = -1 | |
last_R = -1 | |
n = len(dominoes) | |
result = dominoes | |
for pos in range(n): | |
if result[pos] == 'L': | |
if last_R > last_L: | |
result = newDomino.doubleDominoPush(last_R, pos, result) | |
elif (last_L > last_R) or (last_L == -1): | |
result = newDomino.leftDominoPush(last_L + 1, pos, result) | |
last_L = pos | |
elif result[pos] == 'R': | |
if last_R > last_L: | |
result = newDomino.rightDominoPush(last_R, pos, result) | |
last_R = pos | |
# Final case: (R)RR...R(end) | |
if last_R > last_L: | |
result = newDomino.rightDominoPush(last_R, n - 1, result) | |
return result | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment