Giả sử chúng ta có một chuỗi s trong đó mỗi ký tự là "L", "R" hoặc "?". "L" có nghĩa là di chuyển sang trái một đơn vị, "R" có nghĩa là di chuyển sang phải một đơn vị và "?" có nghĩa là "L" hoặc "R". Nếu chúng ta đang ở vị trí 0, chúng ta phải tìm khoảng cách lớn nhất có thể từ 0 bằng cách thay thế "?" bằng "L" hoặc "R".
Vì vậy, nếu đầu vào là "LLRRL ??", thì đầu ra sẽ là 3, hãy thay thế? sử dụng L để di chuyển sang trái 5 đơn vị và sang phải 2 đơn vị, do đó dịch chuyển tối đa là 3.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
op:=0, l:=0, r:=0
-
cho mỗi nó trong s -
-
nếu nó giống với 'L', thì -
-
(tăng l lên 1)
-
-
ngược lại, khi nó giống với 'R', thì -
-
(tăng r lên 1)
-
-
Nếu không
-
(tăng op lên 1)
-
-
-
trả về tối đa là (l và r) - tối thiểu là (l và r) + op
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#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??")); }
Đầu vào
"LLRRL??"
Đầu ra
3