华为OD机试 - 最长子字符串的长度(二) (Java 2024 D卷 100分)

news2024/9/20 1:28:33

在这里插入图片描述

华为OD机试 2024D卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(D卷+C卷+A卷+B卷)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

给你一个字符串 s,字符串 s 首尾相连成一个环形,请你在环中找出 ‘l’、‘o’、‘x’ 字符都恰好出现了偶数次最长子字符串 的长度。

二、输入描述

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

三、输出描述

输出是一个整数。

备注:

  • 1 ≤ s.length ≤ 5 * 10^5
  • s 只包含小写英文字母

四、测试用例

测试用例1:

1、输入

alolobo

2、输出

6

3、说明

最长子字符串之一是 “alolob”,它包含 ‘l’、‘o’ 各 2 个,以及 0 个 ‘x’。

测试用例2:

1、输入

looxdolx

2、输出

7

3、说明

最长的子字符串是 “oxdolxl”,由于是首尾连接在一起的,所以最后一个 ‘x’ 和开头的 ‘l’ 是连接在一起的,此字符串包含 2 个 ‘l’、2 个 ‘o’、2 个 ‘x’。

五、解题思路

  1. 将字符串 s 扩展为自身的两倍。这样可以方便地处理环形问题。扩展后的字符串可以模拟环形的效果。
  2. 使用位运算记录字符 ‘l’、‘o’、‘x’ 的出现次数的奇偶性。每个字符对应一个二进制位,出现次数为偶数时该位为0,奇数时为1。
  3. 维护一个前缀和数组,用于记录每个字符在当前位置的出现次数。
  4. 使用哈希表记录每种奇偶状态首次出现的位置。这样可以快速查找当前状态与之前出现的相同状态之间的距离。
  5. 如果一个状态已经出现过,则表示从该状态第一次出现的位置到当前的位置之间的子字符串中,‘l’、‘o’、‘x’ 字符都出现偶数次。
  6. 遍历扩展后的字符串,更新 ‘l’、‘o’、‘x’ 字符的出现次数并计算当前奇偶状态。
  7. 使用哈希表查询当前奇偶状态的首次出现位置,计算子字符串长度,并更新最长子字符串的长度。

六、Java算法源码

public class OdTest {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();

        // 扩展字符串为两倍长度
        String extended = s + s;
        int n = s.length();

        // 哈希表记录奇偶状态首次出现的位置
        Map<Integer, Integer> stateMap = new HashMap<>();
        stateMap.put(0, -1); // 初始状态

        int[] count = new int[3]; // 记录 l, o, x 的出现次数
        int state = 0;
        int maxLength = 0;

        for (int i = 0; i < extended.length(); i++) {
            char c = extended.charAt(i);

            if (c == 'l') {
                count[0]++;
            } else if (c == 'o') {
                count[1]++;
            } else if (c == 'x') {
                count[2]++;
            }

            // 计算当前状态
            state = ((count[0] % 2) << 2) | ((count[1] % 2) << 1) | (count[2] % 2);

            // 记录或更新最长子字符串长度
            if (stateMap.containsKey(state)) {
                int prevIndex = stateMap.get(state);
                if (i - prevIndex > n) break; // 确保子字符串在原字符串长度内
                maxLength = Math.max(maxLength, i - prevIndex);
            } else {
                stateMap.put(state, i);
            }
        }

        System.out.println(maxLength);
    }
}

七、效果展示

1、输入

bcbcbc

2、输出

6

3、说明

字符串 “bcbcbc” 本身就是最长的,因为 ‘l’、‘o’、‘x’ 都出现了 0 次。

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 D卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(D卷+C卷+A卷+B卷)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1990974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么要推荐R语言?欢迎订阅专栏《R 探索临床数据科学》

统计分析的强大支持&#xff1a; R语言最初是为统计分析而设计的&#xff0c;至今仍然在这方面保持领先地位。无论是基础统计、回归分析、时间序列分析还是高级统计建模&#xff0c;R都能提供丰富的函数和包&#xff0c;帮助我们轻松实现各种统计分析&#xff0c;很简单的代码就…

搭建个人博客需要做哪些事

文章目录 前言搭建步骤站点服务器站点域名注册域名ICP 备案公安备案域名解析 博客图床图床是什么图床搭建 博客站点搭建建站工具本地搭建博客部署 站点运营百度收录百度统计 总结 前言 花了几天时间&#xff0c;搭建了一个个人博客&#xff0c;也算是完成了年初立的一个flag&a…

VSCODE调试程序

1、打开 2、具体测试过程 &#xff08;1&#xff09;把路径改成真正执行的程序的绝对路径&#xff08;${workspaceFolder}这个代表就是项目根目录&#xff09; &#xff08;2&#xff09;然后先注释preLauchTask。 &#xff08;3&#xff09;重新编译一下文件&#xff0c;make…

全新神经网络:Kolmogorov-Arnold网络更具解释性,有望为物理学家提供新假设

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

FDE Solver 的 enabled 选项是不开放的

FDE Solver 的 enabled 选项是不开放的 正文正文 在 Mode 工程文件中,只能添加一个 FDE Solver,并且,不同于结构组件,对于结构组件,我们通常可以使用如下脚本将其设置为不启用状态。 比如,我们这里有一个三角型结构。 我们通过如下脚本设置其为不启用状态后, CAD 显示…

准确度与精密度:差异和示例

准确度与精密度&#xff1a;差异和示例 文章目录 一、说明二、准确性的定义三、精度的定义四、飞镖板上的准确度与精确度五、如何记住准确度与精确度六、如何测试准确度和精密度 一、说明 当您依赖数据得出结论时&#xff0c;准确度和精确度是测量的关键属性。这两个概念都适…

Git合并多笔提交为一笔

Git合并多笔提交为一笔 1. 背景 在实际项目开发中&#xff0c;我们会基于生产分支拉出很多需求分支&#xff0c;在需求分支开发完成后再将代码合到生产分支&#xff0c;但随着提交次数越来越多&#xff0c;我们在合到生产分支的时候就得一笔一笔的入库&#xff0c;特别麻烦&a…

day14-测试自动化之Selenium的元素操作、浏览器操作等

一、元素操作 1.1.为什么要学习操作元素的方法&#xff1f; 1).需要让脚本模拟用户给指定元素输入值 2).需要让脚本模拟人为删除元素的内容 3).需要让脚本模拟点击操作 1.2.元素常用操作方法 1).click&#xff08;&#xff09;点击方法 2).send_keys(value) 输入方法 3).clear(…

手表运动报告生成以及手机展示

一.运动报告组成部分 一般一份运动健康的报告包括以下信息&#xff1a; 1.运动轨迹区。2.报告数据区。(运动总体概览&#xff0c;如距离&#xff0c;时长&#xff0c;训练表现等)3.曲线图表区。(心率曲线&#xff0c;海拔曲线&#xff0c;速度&#xff0c;配速曲线) 二.组成部…

PHP + Laravel + RabbitMQ + Redis 实现消息队列 (三) 消费队列在RabbitMQ和redis中的发布和订阅

发布订阅&#xff08;Pub/Sub&#xff09; 对于消息队列传统的模式来说&#xff0c;一个消费者消费一条消息&#xff0c;这条消息被消费之后就不会再次被其它的消费者消费。但是在发布订阅模式中&#xff0c;一条消息是可以被多个消费者消费的&#xff0c;这些消费者其实相当于…

SOMEIP_ETS_021:echoINT8

测试目的&#xff1a; 验证DUT在发送和接收INT8参数时&#xff0c;是否能够保持参数的值和顺序不变。 描述 本测试用例旨在检验DUT在处理包含INT8类型参数的SOME/IP消息时&#xff0c;是否能够正确地发送和接收这些参数&#xff0c;并且确保返回的方法响应消息中的INT8参数值…

QT(C#)-QTabWidget修改字体后Tab页显示不完整的解决方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、 前言2、问题示例3、解决方法 1、 前言 最近一段时间学习QT的程序开发&#xff0c;遇到了如标题所说的问题&#xff0c;经过查询和摸索找到了解决方法&#xff…

CSP-J 复赛 模拟题6

1.大小写字母互换&#xff1a; 题目描述 由输入给定一个字符串&#xff0c;你的任务是将原字符串中的大写字母转换成其对应的小写字母&#xff0c;还要将原字符串中的小写字母转换成对应的大写字母&#xff0c;其余字符不变。 输出转换之后得到的新字符串。 输入格式 一行…

Flink开发语言大比拼:Java与Scala怎么选好?

在选择Apache Flink的开发语言时&#xff0c;Java和Scala各有优劣&#xff0c;最合适的选择取决于项目需求、团队技能和偏好。 Apache Flink是一个开源流处理框架&#xff0c;广泛应用于实时数据处理场景&#xff0c;如金融交易监控、网络流量分析和用户行为分析等。Flink支持J…

水泵性能参数详解

水泵性能参数之流量 水泵流量是指水泵单位时间内输送液体的体积或重量&#xff0c;用符号Q来表示&#xff0c;常用单位有m/h、m/s、L/s或t/h。 水泵铭牌上标注的流量是这台泵的设计流量&#xff0c;又称额定流量&#xff0c;水泵在额定流量下运行效率最高。 水泵流量计算公式为…

代码随想录训练营 Day23打卡 回溯算法part02 39. 组合总和 40. 组合总和II 131. 分割回文串

代码随想录训练营 Day23打卡 回溯算法part02 一、 力扣39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回…

李飞飞亲自撰文,数十名科学家签署联名信,反对加州AI限制法案

AI真的已经危险到要如此监管的地步了吗&#xff1f; 点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com 在创新的热土硅谷&#xff0c;李飞飞、吴恩达等 AI 科学家正在与监管部门展开一场关于安全与创新的拉锯战。 这场拉锯战的核心是一个名叫 SB-1047 的法案…

云平台部署 FunAudioLLM 语音天花板

FunAudioLLM FunAudioLLM 是阿里开源的语音处理模型&#xff0c;包含 SenseVoice 和 CosyVoice 两个模型。可以实现 5 种语言生成&#xff0c;以及 50 种语言无缝翻译&#xff0c;还能识别语音情绪。 FunAudioLLM&#xff1a;https://github.com/FunAudioLLM CosyVoice开源仓…

【Material-UI】按钮组:垂直按钮组详解

文章目录 一、按钮组概述1. 组件介绍2. 基本用法 二、垂直按钮组的应用场景1. 导航菜单2. 表单操作3. 选项切换 三、按钮组的样式定制1. 变体&#xff08;Variants&#xff09;2. 颜色&#xff08;Colors&#xff09; 四、垂直按钮组的优势1. 空间利用2. 可读性与易用性3. 视觉…

【网络基础一】几乎不讲任何网络协议细节,搭建网络基本结构

文章目录 问题认识“协议”计算机通信问题技术问题应用问题 协议分层 统编程帮助我们处理数据&#xff0c;网络编程帮助我们获取数据&#xff0c;网络配上我们写的线程池模块很快就搭建起来了。 问题 网卡是文件吗&#xff1f; 是的&#xff0c;所以未来网络通信的本质反馈到编…