华为OD机试 - 字符串划分(Java 2024 E卷 100分)

在这里插入图片描述

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

专栏导读

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

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

一、题目描述

给定一个小写字母组成的字符串 s,请找出字符串中两个不同位置的字符作为分割点,使得字符串分成三个连续子串且子串权重相等,注意子串不包含分割点。

若能找到满足条件的两个分割点,请输出这两个分割点在字符串中的位置下标,若不能找到满足条件的分割点请返回0,0。

子串权重计算方式为:子串所有字符的ASCII码数值之和。

二、输入描述

输入为一个字符串,字符串由a~z,26个小写字母组成,5 ≤ 字符串长度 ≤ 200。

三、输出描述

输出为两个分割点在字符串中的位置下标,以逗号分隔

备注

只考虑唯一解,不存在一个输入多种输出解的情况

四、测试用例

测试用例1:

1、输入

acdbbbca

2、输出

2,5

3、说明

以位置2和5作为分割点,将字符串分割为ac, db, bb, ca三个子串,每一个的子串权重都为196,输出为:2,5

测试用例2:

1、输入

abcabc

2、输出

0,0

3、说明

找不到符合条件的分割点,输出为:0,0

五、解题思路

题目要求将字符串分成三个连续子串,且子串的ASCII码值之和相等。为了快速计算子串的权重(ASCII码值之和),使用前缀和数组来存储从字符串开头到当前位置的ASCII总和。前缀和的优势在于,它可以在常数时间内计算任何子串的权重,从而减少计算时间复杂度。

  1. 使用两层嵌套循环来找到两个分割点 (i, j),分别作为第一个和第二个分割点,使字符串分成三个子串。
  2. 第一层循环:找到第一个分割点 i,i 的范围是 1 到 n-4,确保第一个子串至少包含一个字符。
  3. 第二层循环:找到第二个分割点 j,j 的范围是 i + 2 到 n - 2,确保中间子串至少包含一个字符,并且第二个分割点要在第一个分割点之后。
  4. 子串权重比较:使用前缀和数组来计算三个子串的权重,分别为:
    • 第一个子串的权重:sum1 = prefixSum[i]
    • 第二个子串的权重:sum2 = prefixSum[j] - prefixSum[i + 1]
    • 第三个子串的权重:sum3 = prefixSum[n] - prefixSum[j + 1]
  5. 比较这三个权重,如果相等,则找到了满足条件的分割点,输出结果并停止查找。
  6. 如果找到满足条件的两个分割点,输出它们的索引;如果没有找到,返回 0,0。

时间复杂度

  1. 前缀和数组构建:O(n)
  2. 双重循环:最坏情况下需要遍历约 O(n^2) 的分割点组合,但由于使用了前缀和数组,每次判断子串权重的比较为常数时间。因此,整体的时间复杂度接近 O(n^2)。
  3. 该时间复杂度在题目给定的范围(5 ≤ n ≤ 200)内是可接受的。

六、Java算法源码

public class OdTest011 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s = scanner.nextLine().trim(); // 读取输入字符串scanner.close();int n = s.length();if(n < 5 || n > 200){// 根据题目限制,字符串长度应在5到200之间System.out.println("0,0");return;}// 计算前缀和数组long[] prefixSum = new long[n + 1];for(int i = 0; i < n; i++){prefixSum[i + 1] = prefixSum[i] + (int)s.charAt(i);}boolean found = false;int split1 = 0, split2 = 0;// 遍历所有可能的分割点对 (i, j)// 确保每个子串至少有一个字符for(int i = 1; i <= n - 4; i++){ // 第一个分割点至少在位置1,最多在n-4for(int j = i + 2; j <= n - 2; j++){ // 第二个分割点至少在i+2,最多在n-2long sum1 = prefixSum[i];long sum2 = prefixSum[j] - prefixSum[i + 1];long sum3 = prefixSum[n] - prefixSum[j + 1];if(sum1 == sum2 && sum2 == sum3){split1 = i;split2 = j;found = true;break; // 找到后立即停止}}if(found){break;}}// 输出结果if(found){System.out.println(split1 + "," + split2);} else {System.out.println("0,0");}}
}

七、效果展示

1、输入

acdbbbca

2、输出

2,5

3、说明

以位置2和5作为分割点,将字符串分割为ac, db, bb, ca三个子串,每一个的子串权重都为196,输出为:2,5

在这里插入图片描述


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

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

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

在这里插入图片描述

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

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

相关文章

Python | Leetcode Python题解之第416题分割等和子集

题目&#xff1a; 题解&#xff1a; class Solution:def canPartition(self, nums: List[int]) -> bool:n len(nums)if n < 2:return Falsetotal sum(nums)if total % 2 ! 0:return Falsetarget total // 2dp [True] [False] * targetfor i, num in enumerate(nums…

最低成本的游戏串流方案分享 如何自己打造云电脑?

今天教大家如何最低成本实现串流 出门在外也可以随时随地游玩端游大作 硬件准备&#xff1a;一台电脑 手机/平板一台 软件&#xff1a;Gameviewer远程 为啥不用moonlight等其他软件呢 因为设置公网穿透等复杂操作对小白来说不太友好 而GameViewer从安装到使用仅需一键 对比同类…

MATLAB系列07:输入/输入函数

MATLAB系列07&#xff1a;输入/输入函数 8. 输入/输入函数8.1 函数textread8.2 关于load和save命令的进一步说明8.3 MATLAB文件过程简介8.4 文件的打开和关闭8.4.1 fopen函数8.4.2 fclose函数 8.5 二进制 I/O 函数8.5.1 fwrite 函数8.5.2 fread函数 8.6 格式化 I/O 函数8.6.1 f…

【C++ 差分数组 前后缀分解】P7404家庭菜园

本文涉及知识点 C差分数组 C前后缀分解 P7404家庭菜园 出自洛谷&#xff0c;我简述一下。 已知数组a&#xff0c;长度为n(1<n<2e5),1 <a[i] <1e9。一次操作如下&#xff1a;将a[i…j]全1。问最少操作多少次&#xff0c;使得a成为山形数组&#xff0c;即存在k&am…

力扣题解2332

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;中等&#xff09;​&#xff1a; 坐上公交的最晚时间 给你一个下标从 0 开始长度为 n 的整数数组 buses &#xff0c;其中 buses[i] 表示第 i 辆公交车的出发时间。同时给你一…

算法题——最小会议室数量

题目1: 1.假定会议时间从凌晨零点开始&#xff0c;即 0<si<ei<1440&#xff0c;si和ei代表当天某一时刻从零点开始计算的开始和结束分钟数&#xff0c;如[90,360]&#xff0c;表示会议时间从1:30到6:00。 2.不考虑房间的容量问题&#xff0c;并且公司为了提升大家的体…

计算机组成原理-存储系统(二)半导体存储器

2.1DAM芯片 分类&#xff1a; DRAM芯片&#xff1a;使用栅极电容存储信息SRAM芯片&#xff1a;使用双稳态触发器存储信息 核心区别&#xff1a;储存元不一样 2.2DRAM和SRAM的比较 对于DRAM中&#xff1a; 1&#xff1a;电容内存储了电荷0&#xff1a;电容内未存储电荷 DR…

HTML讲解(一)body部分

目录 1.什么是HTML 2.HTML基本框架 3.标题声明 4.修改标题位置 5.段落声明 6.修改段落位置 7.超链接访问 8.图像访问 9.改变网页背景及文本颜色 10.添加网页背景图 11.超链接改变颜色 12.设置网页边距 小心&#xff01;VS2022不可直接接触&#xff0c;否则&#xff…

Qt窗口——QMenuBar

文章目录 QMenuBar示例演示给菜单栏设置快捷键给菜单项设置快捷键添加子菜单添加分割线添加图标 QMenuBar Qt中采用QMenuBar来创建菜单栏&#xff0c;一个主窗口&#xff0c;只允许有一个菜单栏&#xff0c;位于主窗口的顶部、主窗口标题栏下面&#xff1b;一个菜单栏里面有多…

【技术解析】消息中间件MQ:从原理到RabbitMQ实战(深入浅出)

文章目录 【技术解析】消息中间件MQ&#xff1a;从原理到RabbitMQ实战(深入浅出)1.简介1.1 什么是消息中间件1.2 传统的http请求存在那些缺点1.3 Mq应用场景有那些1.4 为什么需要使用mq1.5 Mq与多线程之间区别1.6 Mq消息中间件名词1.7主流mq区别对比1.8 Mq设计基础知识 2.Rabbi…

python画图|3D bar进阶探索

前述学习过程只能怪&#xff0c;已经探究了3D直方图的基础教程&#xff0c;详见下述链接&#xff1a; python画图|3D直方图基础教程-CSDN博客 实际上&#xff0c;基础文章直接进入了堆叠教程&#xff0c;相对来说基础的程度不够&#xff0c;因此有必要再次探索。 【1】官网教…

通信工程学习:什么是POS无源光分配器

POS&#xff1a;无源光分配器 POS&#xff08;Passive Optical Splitter&#xff0c;无源光分配器&#xff09;是无源光网络&#xff08;Passive Optical Network, PON&#xff09;中的一个重要组成部分&#xff0c;它位于光线路终端&#xff08;OLT&#xff09;和光网络单元&a…

基于图卷积网络的轻量化推荐模型(论文复现)

基于图卷积网络的轻量化推荐模型&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 概述 图卷积网络&#xff08;Graph Convolution Network&#xff0c;GCN&#xff09;已经广泛的应用于推荐系统&#xff0c;基于GCN的协同过滤算法&#xff08;例如…

【路径规划】人工势场(APF)、涡旋APF、安全APF和动态窗口方法在航点跟踪问题的比较

摘要 本研究比较了几种路径规划算法在航路点跟踪中的性能&#xff0c;包括传统的人工势场算法&#xff08;APF&#xff09;、涡旋人工势场&#xff08;VAPF&#xff09;、安全人工势场&#xff08;SAPF&#xff09;和动态窗口方法&#xff08;DWA&#xff09;。实验结果表明&a…

PyCharm的使用

PyCharm的入门使用教程 下载和安装PyCharm&#xff1a; 首先&#xff0c;访问JetBrains官方网站&#xff08;https://www.jetbrains.com/pycharm/&#xff09;下载PyCharm的最新版本。根据您的操作系统选择合适的版本进行下载。 安装完成后&#xff0c;打开PyCharm。 创建新…

实战分享:我是如何挖到CSDN漏洞的?

文章目录 前言一、过程二、总结《Windows信息安全和网络攻防》——清华大学出版社 前言 CxxN是国内很出名的博客平台&#xff0c;用户量非常大&#xff0c;注册用户据说有1个亿&#xff1f;(官方写的)本次我发现的漏洞详情是可以通过用户的id直接获取用户完整的手机号&#xf…

如何创建和编辑抖音百科词条,不会的找我们代创建!

如何创建和编辑抖音百科词条&#xff0c;不会的找我们代创建&#xff01; 如何创建抖音百科个人词条&#xff0c;个人抖音百科的创建 #抖音百科 #百科 #推广 做过百度百科的老板们注意了&#xff0c;等一下别划走。 2024 年品宣新风口出现了&#xff0c;抖音百科正在替代百度…

金言问卷:国外问卷调查可以做吗?

国外问卷调查可不可以做&#xff1f; 金言问卷告诉你&#xff0c;答案是肯定可以的。接下来就给你讲讲为什么是肯定的答案。 首先&#xff0c;为什么是肯定可以做呢&#xff1f;因为国外问卷调查可以产生收益是真实的&#xff0c;像我们客户昨天193美元1350人民币&#xff0c…

Flutter Android Package调用python

操作步骤 一、创建一个Flutter Package 使用以下指令创建一个Flutter Package flutter create --templateplugin --platformsandroid,ios -a java flutter_package_python 二、修改android/build.gradle文件 在buildscript——>dependencies中添加以下内容 //导入Chaqu…

MySQL面试题--连续三天登录(困难)

一、准备工作 drop table if exists author_tb; CREATE TABLE author_tb (author_id int(10) NOT NULL,author_level int(10) NOT NULL,sex char(10) NOT NULL ); INSERT INTO author_tb VALUES(101, 6, m),(102, 1, f),(103, 1, m),(104, 3, m),(105, 4, f),(106…