环中最长子串/字符成环找偶数O

2024-02-19 06:44

本文主要是介绍环中最长子串/字符成环找偶数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()函数的格式说明符对于输出字符和字符串有不同的含义:

  1. %c:用于输出单个字符。例如:

    printf("%c", str[i]);
    

    这行代码会逐个输出字符串 str 中每个位置(索引为 i)的字符。

  2. %s:用于输出整个字符串。例如:

    printf("%s", str);
    

    如果你想通过 %s 输出一个字符串,你需要传入字符串的首地址,而不是单个字符的位置。
    如果你想循环打印出字符串中的每一个字符,则应该使用 %c

for (int i = 0; i < len * 2; i++) {printf("%c", str[i]);
}

这篇关于环中最长子串/字符成环找偶数O的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/723817

相关文章

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

poj2406(连续重复子串)

题意:判断串s是不是str^n,求str的最大长度。 解题思路:kmp可解,后缀数组的倍增算法超时。next[i]表示在第i位匹配失败后,自动跳转到next[i],所以1到next[n]这个串 等于 n-next[n]+1到n这个串。 代码如下; #include<iostream>#include<algorithm>#include<stdio.h>#include<math.

poj3261(可重复k次的最长子串)

题意:可重复k次的最长子串 解题思路:求所有区间[x,x+k-1]中的最小值的最大值。求sa时间复杂度Nlog(N),求最值时间复杂度N*N,但实际复杂度很低。题目数据也比较水,不然估计过不了。 代码入下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring

spoj705( 求不相同的子串个数)

题意:求串s的不同子串的个数 解题思路:任何子串都是某个后缀的前缀,对n个后缀排序,求某个后缀的前缀的个数,减去height[i](第i个后缀与第i-1 个后缀有相同的height[i]个前缀)。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstrin