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
广告