编写一个函数,接收一个字符串,统计其中任意两个及两个以上相邻字符相同的子串的个数。比如字符串"abbcccaddd"子串有"bb"、"cc"、"cc"、"dd"、"dd"、"ccc"和"ddd",共7个。函数原型为:int fun(const char *str);
时间: 2023-07-02 13:11:33 浏览: 150
编写程序,要求统计任意字符串中数字字符,字母和其他字符的个数
4星 · 用户满意度95%
好的,我来给你写一个函数:
```c++
int fun(const char *str) {
int count = 0;
int len = strlen(str);
for (int i = 0; i < len - 1; i++) {
int j = i + 1;
while (j < len && str[j] == str[i]) {
j++;
}
int subLen = j - i;
count += subLen * (subLen - 1) / 2;
i = j - 1;
}
return count;
}
```
这个函数的思路是遍历整个字符串,对于每个字符,向后找到所有与它相同的字符并计算它们组成的子串数量,再累加到总数中。
具体来说,我们用两个指针 `i` 和 `j` 来遍历字符串。首先 `i` 指向字符串的第一个字符,然后 `j` 往后找直到找到第一个与 `str[i]` 不同的字符。这样一来,`str[i..j-1]` 就是一个相邻字符相同的子串。假设这个子串的长度为 `subLen`,那么它可以组成 $\frac{subLen \times (subLen-1)}{2}$ 个子串,其中 $\frac{subLen \times (subLen-1)}{2}$ 是组合数学中的计算公式。这个公式的意思是,在子串中任选两个字符组成一个子串的方案数。
最后,我们将所有的子串数量累加起来,就可以得到最终答案。
阅读全文