C++ 中 a 比 b 更多的字首


在這個問題中,我們給定一個僅包含 a 和 b 的字串 str 和一個整數 N,其中透過將 str 重複 n 次來建立字串。我們的任務是列印其中 a 的計數大於 b 的計數的子字串的總數。

讓我們舉個例子來理解這個問題

Input: aab 2
Output: 9
Explanation: created string is aabaab.
Substrings with count(a) > count(b) : ‘a’ , ‘aa’, ‘aab’, ‘aaba’, ‘aabaa’, ‘aabaab’, ‘aba’, ‘baa’, ‘abaa’.

為了解決這個問題,我們將不得不檢查字串是否包含所需的字首子集。在這裡,我們將檢查字串 str 而不是完整版本。在這裡,我們將根據字首和 a 和 b 的出現次數來檢查字串。

此程式將顯示我們解決方案的實現

示例

 線上演示

#include <iostream>
#include <string.h>
using namespace std;
int prefixCount(string str, int n){
   int a = 0, b = 0, count = 0;
   int i = 0;
   int len = str.size();
   for (i = 0; i < len; i++) {
      if (str[i] == 'a')
         a++;
      if (str[i] == 'b')
         b++;
      if (a > b) {
      count++;
   }
}
if (count == 0 || n == 1) {
   cout<<count;
   return 0;
}
if (count == len || a - b == 0) {
   cout<<(count*n);
   return 0;
}
int n2 = n - 1, count2 = 0;
while (n2 != 0) {
   for (i = 0; i < len; i++) {
      if (str[i] == 'a')
         a++;
      if (str[i] == 'b')
         b++;
      if (a > b)
      count2++;
   }
   count += count2;
   n2--;
   if (count2 == 0)
      break;
   if (count2 == len) {
      count += (n2 * count2);
      break;
   }
   count2 = 0;
   }
   return count;
}
int main() {
   string str = "aba";
   int N = 2;
   cout<<"The string created by using '"<<str<<"' "<<N<<" times has ";
   cout<<prefixCount(str, N)<<" substring with count of a greater than count of b";
   return 0;
}

輸出

The string created by using 'aba' 2 times has 5 substring with count of a greater than count of b

更新於: 2020年2月3日

90 次檢視

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告