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