C++程序计算至少需要多少分钟才能不再有新的学生生气


假设我们有一个长度为n的字符串S,其中只有两种字符'A'或'P'。一行上有n个学生,如果S[i] = 'A',则第i个学生生气,如果为'P',则表示S[i]是耐心的。每分钟,生气学生在索引i处会打索引i+1处的耐心学生,对于最后一个学生,即使他生气了,他也不会打任何人。在打了一个耐心学生后,那个学生也会生气。我们必须找到最少的分钟数,之后不再有新的学生生气。

所以,如果输入像S = "PPAPP",那么输出将是2,因为在第一分钟后,字符串将变为"PPAAP",然后在第二分钟变为"PPAAA",然后不再有新的学生生气。

步骤

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

n := size of S
ans := 0, cnt = 0
for initialize i := n - 1, when i >= 0, update (decrease i by 1), do:
   if S[i] is same as 'P', then:
      (increase cnt by 1)
   Otherwise
      ans := maximum of ans and cnt
      cnt := 0
return ans

示例

让我们看看以下实现以更好地理解:

#include <bits/stdc++.h>
using namespace std;

int solve(string S) {
   int n = S.size();
   int ans = 0, cnt = 0;
   for (int i = n - 1; i >= 0; i--) {
      if (S[i] == 'P') {
         cnt++;
      } else {
         ans = max(ans, cnt);
         cnt = 0;
      }
   }
   return ans;
}
int main() {
   string S = "PPAPP";
   cout << solve(S) << endl;
}

输入

PPAPP

输出

2

更新于: 2022年3月3日

149 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告