C++ 中最远离原点


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

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

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

  • op := 0、l := 0、r := 0

  • 对于 s 中的每个 it:

    • 如果 it 与 'L' 相同,则:

      • (将 l 增加 1)

    • 否则当 it 与 'R' 相同时,则:

      • (将 r 增加 1)

    • 否则

      • (将 op 增加 1)

  • 返回 (l and r) 的最大值 - (l and 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

更新日期: 2020 年 9 月 2 日

620 次浏览

开始您的 职业生涯

通过完成课程获得认证

开始
广告