【算法分析与设计】

📝个人主页:五敷有你

🔥系列专栏:算法分析与设计

⛺️稳中求进,晒太阳

题目

给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出 'o' 字符出现了偶数次最长子字符串的长度。

输入是一串小写字母组成的字符串

输出是一个整数

示例

样例输入
复制代码
alolobo
样例输出
复制代码
6

思路

要解决这个问题,

首先需要遍历环形字符串 s,然后记录每个位置开始的子字符串中 'o' 字符出现的次数。为了处理环形的情况,我们可以将字符串复制一次并连接起来,这样就可以处理环形的情况了。

然后,我们可以从每个位置开始,向前或向后遍历,统计 'o' 字符出现的次数,并记录下来。最后,我们找到出现偶数次 'o' 字符的最长子字符串的长度。

环的问题怎么实现

连接字符串的末尾到自身实际上模拟了环形结构。当我们需要在环中查找字符时,我们可以简单地遍历整个字符串,因为字符串的末尾连接到了字符串的开头,形成了一个环。这样一来,我们就可以在环中找到字符出现的次数,并且能够处理环形结构中的字符查找问题。

考虑一个简单的例子,字符串 "abc",如果我们将它连接到自身的末尾,得到 "abcabc",这就形成了一个环形结构。在这个环形结构中,我们可以很容易地找到字符 'a'、'b' 或 'c' 出现的次数,因为我们只需要从任意位置开始遍历整个字符串,直到回到起始位置即可。这样一来,我们就可以模拟处理环形结构中的字符查找问题。

所以,通过将字符串连接到自身的末尾,我们实际上实现了一个环形结构,从而达到了模拟的效果。

代码实现

复制代码
public class Main {
    public static int maxEvenOSubstringLength(String s) {
        // 复制字符串并连接成环
        String sCircle = s + s;

        int maxLength = 0;

        // 遍历每个位置作为子字符串的起始位置
        for (int i = 0; i < s.length(); i++) {
            int count = 0;
            // 向前遍历统计 'o' 字符出现的次数
            for (int j = i; j < i + s.length(); j++) {
                if (sCircle.charAt(j) == 'o') {
                    count++;
                }
                // 如果 'o' 字符出现了偶数次,则更新最长子字符串的长度
                if (count % 2 == 0) {
                    maxLength = Math.max(maxLength, j - i + 1);
                }
            }
        }

        return maxLength;
    }

    public static void main(String[] args) {
        String s = "xooxooxoo";
        System.out.println(maxEvenOSubstringLength(s)); // 输出 6,因为 "ooxoox" 中 'o' 出现了偶数次
    }
}

运行结果

相关推荐
乌暮几秒前
从 `println` 到生产级日志:Spring Boot 日志体系完全指南
java·开发语言·jvm·spring boot·后端·学习·面试
碧海银沙音频科技研究院7 分钟前
面向长尾音频分类的知识蒸馏研究
人工智能·算法·音视频
脉动数据行情12 分钟前
Java OkHttp 对接国际期货批量行情 SpringBoot 定时落库实践
java·spring boot·okhttp
星夜离尘5615 分钟前
MATLAB 定点量化误差实验 半个 LSB 的界限为什么挡不住削顶失真
开发语言·matlab
Wang's Blog19 分钟前
Java 项目实战: 交友项目 - 百度人脸识别:介绍
java·开发语言·交友
障碍的枫子26 分钟前
我的第一个Agent
开发语言·python·langchain
Pniubi36 分钟前
区分agent中长期记忆和偏好记忆
开发语言·ai·智能体
alphaTao41 分钟前
LeetCode 每日一题 2026/10/12-2026/10/18
算法·leetcode
一枕槐安4871 小时前
大模型应用后端设计:上下文管理、缓存、降级策略的工程方案总结
java·spring·缓存
青岚_Nox1 小时前
# C语言实战:函数完全指南——从基础概念到static/extern深度解析
算法