diff --git a/cpp/0838-push-dominoes.cpp b/cpp/0838-push-dominoes.cpp new file mode 100644 index 000000000..fa0ddb478 --- /dev/null +++ b/cpp/0838-push-dominoes.cpp @@ -0,0 +1,39 @@ +/* + Time: O(n) + Space: O(n) +*/ + +class Solution { +public: + string pushDominoes(string dominoes) { + + string res = ""; + char prev; + int n = dominoes.size(), count = 1; + + vector left(n, 0), right(n, 0); + for (int i = 0; i < n; i++) { + if (dominoes[i] == 'R') { count = 1; prev = 'R'; } + else if (dominoes[i] != '.') prev = dominoes[i]; + if (prev == 'R' && dominoes[i] == '.') right[i] = count++; + } + + prev = '.'; + for (int i = n-1; i >= 0; i--) { + if (dominoes[i] == 'L') { count = 1; prev = 'L'; } + else if (dominoes[i] != '.') prev = dominoes[i]; + if (prev == 'L' && dominoes[i] == '.') left[i] = count++; + } + + for (int i = 0; i < n; i++) { + if (!left[i] && !right[i]) res += dominoes[i]; + else if (!left[i]) res += 'R'; + else if (!right[i]) res += 'L'; + else if (left[i] == right[i]) res += '.'; + else if (left[i] < right[i]) res += 'L'; + else res += 'R'; + } + + return res; + } +};