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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP