สมมติว่าเรามีสตริงที่อักขระแต่ละตัวเป็น "L", "R" หรือ "?" "L" หมายถึงย้ายหน่วยไปทางซ้ายหนึ่งหน่วย "R" หมายถึงย้ายหน่วยไปทางขวาหนึ่งหน่วยและ "?" หมายถึง "L" หรือ "R" ถ้าเราอยู่ที่ตำแหน่ง 0 เราต้องหาระยะทางสูงสุดที่เป็นไปได้จาก 0 โดยแทนที่ "?" ด้วย "L" หรือ "R"
ดังนั้น หากอินพุตเป็นแบบ "LLRRL หรือไม่" ผลลัพธ์จะเป็น 3 ให้แทนที่ ? ใช้ L เพื่อเลื่อนไปทางซ้าย 5 หน่วยและไปทางขวา 2 หน่วย ดังนั้นการกระจัดสูงสุดคือ 3
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
op :=0, l :=0, r :=0
-
สำหรับแต่ละมันใน s -
-
ถ้ามันเหมือนกับ 'L' แล้ว −
-
(เพิ่ม l ขึ้น 1)
-
-
มิฉะนั้นเมื่อมันเหมือนกับ 'R' แล้ว −
-
(เพิ่ม r ขึ้น 1)
-
-
มิฉะนั้น
-
(เพิ่ม op โดย 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