编写一个函数,接收一个字符串,统计其中任意两个及两个以上相邻字符相同的子串的个数。比如字符串"abbcccaddd"子串有"bb"、"cc"、"cc"、"dd"、"dd"、"ccc"和"ddd",共7个。函数原型为:int fun(const char *str);
时间: 2023-07-02 09:23:56 浏览: 55
好的,这是一个比较基础的字符串处理问题,可以使用双重循环来解决。具体实现如下:
```c++
int fun(const char *str) {
int count = 0; // 统计子串个数
int len = strlen(str); // 字符串长度
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
int k = i;
while (k < j && str[k] == str[k + 1]) {
k++;
}
if (k == j) { // 找到了一个符合要求的子串
count++;
}
}
}
return count;
}
```
这个函数的思路是,枚举任意两个下标 `i` 和 `j`,然后判断 `i` 到 `j` 这个子串是否符合要求。具体判断方法是,从 `i` 开始向后遍历,如果发现相邻的两个字符相同,就继续往后遍历,直到遍历到下标 `j` 或者发现相邻字符不相同为止。如果最终遍历到了下标 `j`,说明这个子串符合要求,计数器加一。
需要注意的是,这里的双重循环的时间复杂度是 $O(n^2)$,所以如果字符串比较长的话,可能会比较慢。可以考虑其他更高效的算法。
相关问题
编写一个函数,接收一个字符串,统计其中任意两个及两个以上相邻字符相同的子串的个数
好的,我可以帮你编写这个函数。以下是 Python 代码实现:
```python
def count_same_substrings(s):
count = 0
for i in range(len(s)-1):
for j in range(i+1, len(s)):
if s[j] == s[j-1]:
count += 1
else:
break
return count
```
这个函数的思路是:从字符串的第一个字符开始,依次枚举它和后面的每一个字符组成的子串,并判断这个子串中是否有相邻字符相同的情况。如果有,就将计数器加1;如果没有,就直接跳出内层循环,枚举下一个子串。
你可以调用这个函数,传入你的字符串,它会返回任意两个及两个以上相邻字符相同的子串的个数。希望能够帮到你!
c语言编写一个函数,接收一个字符串,统计其中任意两个及两个以上相邻字符相同的子串的个数
以下是一个C语言函数,用于统计一个字符串中任意两个及两个以上相邻字符相同的子串的个数:
```c
#include <string.h>
int countSubstr(char *str)
{
int len = strlen(str);
int count = 0;
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (str[i] == str[j]) {
count++;
for (int k = i + 1, l = j + 1; k < j && l < len; k++, l++) {
if (str[k] == str[l]) {
count++;
} else {
break;
}
}
}
}
}
return count;
}
```
该函数接收一个字符串作为参数,然后使用嵌套的for循环遍历字符串中的所有字符对,统计相邻字符相同的子串的个数。具体地,函数使用i和j两个循环变量遍历字符串中的所有字符对,如果字符对相同,则使用k和l两个循环变量从i+1和j+1的位置开始遍历字符串,统计任意两个及两个以上相邻字符相同的子串的个数。最后,函数返回统计结果。
阅读全文