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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.