在 C++ 中查詢長度為 k 的子字串的數量,其字元的 ASCII 值之和可以被 k 整除


在這裡,我們將看到另一個問題,其中給定一個字串和另一個整數值 k。我們必須找到長度為 k 的子字串的數量,其字元的 ASCII 值之和可以被 k 整除。

假設一個字串是“BCGABC”。k 的值為 3。這裡字串 BCG 的 ASCII 值之和為 300,ABC 的 ASCII 值之和為 294,兩者都可以被 k = 3 整除。

方法很簡單。首先,我們必須找到第一個子字串的字元的 ASCII 值,其長度為 k。我們必須使用滑動視窗技術,並減去視窗第一個字元的 ASCII 值,並新增滑動視窗後出現的下一個字元的 ASCII 值,在每次和可以被 k 整除時,我們將增加計數。

示例

 即時演示

#include <iostream>
using namespace std;
int countKLenSubstr(string str, int k) {
   int len = str.length();
   int sum = 0;
   int count = 0 ;
   for (int i = 0; i <len; i++)
      sum += str[i] ; //ASCII sum of first substring
   if (sum % k == 0)
      count++;
   for (int i = k; i < len; i++) {
      int prev_ascii = str[i-k]; //ASCII of the first character of the window
      sum -= prev_ascii;
      sum += str[i];
      if (sum % k == 0)
         count += 1;
   }
   return count ;
}
int main() {
   string s = "BCGABC" ;
   int k = 3 ;
   cout<<"Number of substrings: " << countKLenSubstr(s, k);
}

輸出

Number of substrings: 2

更新於: 2019 年 9 月 25 日

288 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.