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