Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ไกลที่สุดจากแหล่งกำเนิดใน C ++


สมมติว่าเรามีสตริงที่อักขระแต่ละตัวเป็น "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