本文主要是介绍环中最长子串/字符成环找偶数O,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 题目描述
- 输入描述
- 输出描述
- 示例1
- 说明:
- 示例2
- 说明:
- 说明:
- 代码
- 注意:printf中的%c 、%s
题目描述
给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出 ‘o’ 字符出现了偶数次最长子字符串的长度。
给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出 ‘o’ 字符出现了偶数次最长子字符串的长度。
输入描述
输入是一串小写字母组成的字符串
备注
1 <= s.length <= 5 x 10^5
s 只包含小写英文字母
输出描述
输出是一个整数
示例1
输入
alolobo
输出
6
说明:
最长子字符串之一是 “alolob”,它包含’o’ 2个。
示例2
输入
looxdolx
输出
7
说明:
最长子字符串是 “oxdolxl”,由于是首尾连接在一起的,所以最后一个 ‘x’ 和开头的 ‘l’是连接在一起的,此字符串包含 2 个’o’ 。
示例3
输入
bcbcbc
输出
6
说明:
这个示例中,字符串 “bcbcbc” 本身就是最长的,因为 ‘o’ 都出现了 0 次。
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() {char input[500001]; // 创建一个字符数组,用于存储用户输入的字符串,最大长度500000fgets(input, sizeof(input) - 1, stdin); // aloloboinput[strcspn(input, "\n")] = '\0'; // 移除可能存在的换行符int len = strlen(input); // 获取字符串的长度int num = 0; // 初始化'o'字符的计数器// char *str = malloc(len * 2 + 1); // 动态分配内存// strcpy(str, input);// strcat(str, input);// // printf("%s", str); // aloloboalolobo// // 遍历字符串,统计 'o' 字符的数量// for (int i = 0; i < len * 2; i++) {// for (int j = i; j < i + len; j++) {// if (input[j] == 'o') {// num++;// }// }// }// 遍历字符串,统计'o'字符的数量for (int i = 0; i < len; i++) {if (input[i] == 'o') {num++;}}if (num % 2 == 0) {printf("%d", len);} else {printf("%d", len - 1);}return 0;
}
注意:printf中的%c 、%s
在C语言中,printf()
函数的格式说明符对于输出字符和字符串有不同的含义:
-
%c
:用于输出单个字符。例如:printf("%c", str[i]);
这行代码会逐个输出字符串
str
中每个位置(索引为i
)的字符。 -
%s
:用于输出整个字符串。例如:printf("%s", str);
如果你想通过
%s
输出一个字符串,你需要传入字符串的首地址,而不是单个字符的位置。
如果你想循环打印出字符串中的每一个字符,则应该使用%c
:
for (int i = 0; i < len * 2; i++) {printf("%c", str[i]);
}
这篇关于环中最长子串/字符成环找偶数O的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!