C语言一个长度为n的01串,求出包含最长连续1的子串的个数
时间: 2023-05-17 11:06:02 浏览: 85
你好,根据你的问题,我可以给出以下代码实现:
```c
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
char s[n+1];
scanf("%s", s);
int cnt = 0, ans = 0;
for (int i = 0; i < n; i++) {
if (s[i] == '1') {
cnt++;
} else {
ans = ans + (cnt > 0);
cnt = 0;
}
}
ans = ans + (cnt > 0);
printf("%d\n", ans);
return 0;
}
```
这个程序可以求出一个长度为n的01串中包含最长连续1的子串的个数。
相关问题
在一个字符串中,找出最长的连续子串并输出吗?C语言
可以使用双指针法来解决这个问题。具体思路是,定义两个指针i和j,分别指向字符串的开头和结尾。然后,移动指针j,如果当前子串不是连续的,就将指针i移动到当前子串的下一个位置,直到找到最长的连续子串为止。
以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
int len = strlen(str);
int i = 0, j = 0, max_len = 0, start = 0;
while (j < len) {
if (str[j] != str[j-1] + 1) { // 如果当前子串不是连续的
if (j - i > max_len) { // 更新最长连续子串的长度和起始位置
max_len = j - i;
start = i;
}
i = j; // 移动指针i到当前子串的下一个位置
}
j++; // 移动指针j
}
if (j - i > max_len) { // 处理边界情况
max_len = j - i;
start = i;
}
printf("最长的连续子串是:");
for (i = start; i < start + max_len; i++) {
printf("%c", str[i]);
}
printf("\n");
return 0;
}
```
输入一个字符串后,程序会输出最长的连续子串。例如,输入"abcabcdabcdeabcdefg",程序会输出"abcde"。
给定一个字符串,求它的最长回文子串的长度,C语言实现
您好,可以使用 Manacher 算法来求解最长回文子串的长度。
该算法的时间复杂度为 O(n),并且可以在线性时间内找到所有回文子串的起始位置。
下面是 C 语言的实现方法:
```
#include <stdio.h>
#include <string.h>
#define max(a, b) ((a) > (b) ? (a) : (b))
char str[100010];
int p[100010];
int main()
{
scanf("%s", str + 1);
int n = strlen(str + 1);
int mx = 0, id = 0;
for (int i = 1; i <= n; i++)
{
if (mx > i)
p[i] = min(p[(id << 1) - i], mx - i);
else
p[i] = 1;
while (str[i - p[i]] == str[i + p[i]])
p[i]++;
if (p[i] + i > mx)
{
mx = p[i] + i;
id = i;
}
}
int ans = 0;
for (int i = 1; i <= n; i++)
ans = max(ans, p[i] - 1);
printf("%d\n", ans);
return 0;
}
```
希望这对您有帮助!