각 문자가 "L", "R" 또는 "?"인 문자열 s가 있다고 가정합니다. "L"은 왼쪽으로 한 단위 이동, "R"은 오른쪽으로 한 단위 이동, "?" "L" 또는 "R"을 의미합니다. 위치 0에 있는 경우 "?"를 대체하여 0에서 가능한 최대 거리를 찾아야 합니다. "L" 또는 "R"로.
따라서 입력이 "LLRRL??"과 같으면 출력은 3이 되고 ? L을 사용하여 왼쪽으로 5단위, 오른쪽으로 2단위 이동하므로 최대 변위는 3입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
연산 :=0, l :=0, r :=0
-
각각에 대해 s −
-
'L'과 같으면 -
-
(l 1씩 증가)
-
-
그렇지 않으면 'R'과 같을 때 -
-
(r을 1씩 증가)
-
-
그렇지 않으면
-
(1만큼 연산 증가)
-
-
-
(l 및 r)의 최대값 반환 - (l 및 r)의 최소값 + op
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
#include <bits/stdc++.h> using namespace std; class Solution { public: int solve(string s) { int op = 0; int l = 0; int r = 0; for (auto &it : s) { if (it == 'L') { l++; } else if (it == 'R') { r++; } else { op++; } } return max(l, r) - min(l, r) + op; } }; main() { Solution ob; cout << (ob.solve("LLRRL??")); }
입력
"LLRRL??"
출력
3