C ++中最远的起源

假设我们有一个字符串s,其中每个字符都是“ L”,“ R”或“?”。“ L”表示向左移动一个单位,“ R”表示向右移动一个单位,“?” 表示“ L”或“ R”。如果我们位于位置0,则必须通过替换“?”来找到距0可能的最大距离。与“ L”或“ R”。

因此,如果输入类似于“ LLRRL ??”,则输出将为3,替换?。使用L向左移动5个单位,向右移动2个单位,因此最大位移为3。

为了解决这个问题,我们将遵循以下步骤-

  • op:= 0,l:= 0,r:= 0

  • 对于每个在s-

    • (将op增加1)

    • (将r增加1)

    • (将l增加1)

    • 如果与“ L”相同,则-

    • 否则,当它与'R'相同时,则-

    • 除此以外

    • 返回最大值(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