C++ 代码解析:计算字符串中连续相同字符的数量
这段代码实现了一个计算字符串中连续相同字符数量的算法。下面将逐行解释代码的含义:
-
#include <iostream>、#include <string>、#include <vector>:这三行代码分别包含了输入输出流、字符串操作和向量容器的库文件,为代码中使用相关的功能提供支持。 -
using namespace std;:这行代码表示使用标准库命名空间,避免在代码中反复写std::前缀。 -
int main() { ... }:这段代码定义了主函数main,程序从这里开始执行。 -
int n, k;:声明了两个整型变量n和k,用于存储输入的字符串长度和查询次数。 -
cin >> n >> k;:从输入流中读取n和k的值。 -
string s;:声明了一个字符串变量s,用于存储输入的字符串。 -
cin >> s;:从输入流中读取字符串s。 -
vector<int> prefix_count(n, 0);:声明了一个大小为n的整型向量prefix_count,用于存储前缀数组,并将所有元素初始化为 0。 -
prefix_count[0] = 0;:将前缀数组的第一个元素初始化为 0。 -
for (int i = 1; i < n; ++i) { ... }:这段代码使用循环遍历字符串s从下标 1 到n-1。 -
prefix_count[i] = prefix_count[i - 1] + (s[i] == s[i - 1]);:对于每个下标i,如果s[i]等于s[i-1],则prefix_count[i]等于prefix_count[i-1]加 1,否则等于prefix_count[i-1]。这部分代码计算了前缀数组,prefix_count[i]表示从字符串开头到下标i的连续相同字符的数量。 -
for (int i = 0; i < k; ++i) { ... }:这段代码使用循环处理k次查询。 -
int l, r;:声明了两个整型变量l和r,用于存储每个查询的左右边界。 -
cin >> l >> r;:从输入流中读取l和r的值。 -
int count = 0;:声明了一个整型变量count,用于存储查询结果,并将其初始化为 0。 -
if (r - l >= 2) { ... }:如果查询的区间长度大于等于 2,则进行以下操作。 -
count = prefix_count[r - 2] - (l > 1 ? prefix_count[l - 2] : 0);:计算查询区间内的连续相同字符数量。prefix_count[r - 2]表示从字符串开头到r-2的连续相同字符数量,prefix_count[l - 2]表示从字符串开头到l-2的连续相同字符数量,两者的差值即为查询区间内的连续相同字符数量。如果l大于 1,则需要减去prefix_count[l - 2],否则不用减去。 -
cout << count << endl;:输出查询结果。 -
return 0;:程序正常结束,返回 0。
这段代码通过前缀数组优化了查询操作的效率,对于每个查询只需要进行一次常数时间的计算,从而提高了代码的效率。
原文地址: https://www.cveoy.top/t/topic/bNsI 著作权归作者所有。请勿转载和采集!