华为OD刷题C卷 - 每日刷题 7(字符串分隔(二)、欢乐的周末)

两段代码分别解决了两个不同的问题,下面是对它们的概述:

1、(字符串分隔(二)):

这段代码是解决“字符串分隔(二)”的问题。它提供了一个Java类Main,其中包含一个方法solution,该方法接收一个字符串s和一个整数k。任务是对字符串s进行处理,使其除第一个子串外,其余的子串每k个字符组成新的子串,并根据子串中大写字母和小写字母的数量进行大小写转换。

代码首先使用String.split方法以'-'为分隔符将原始字符串s分割成多个子串,并将这些子串加入到StringJoiner中,它用于构建最终的字符串。

接着,代码遍历除了第一个子串之外的所有子串,以k为步长进行切片,然后对每个切片后的子串调用change方法进行大小写转换。change方法会计算子串中大写字母和小写字母的数量,并根据数量的多少来决定是否进行大小写转换。

最后,返回构建好的字符串。

2、(欢乐的周末):

这段代码是解决“欢乐的周末”的问题。它提供了一个Java类Main,其中包含一个方法getResult,该方法接收一个地图的二维数组表示,地图上有通畅的道路(用0表示)、障碍物(用1表示)、小华或小为的位置(用2表示)、以及被选中的聚餐地点(用3表示)。任务是计算小华和小为都能到达的聚餐地点的数量。

代码首先读取地图的大小和具体信息,然后使用一个UnionFindSet对象来处理地图上的连通性。UnionFindSet是一个并查集的数据结构,用于快速判断两个节点是否在同一个连通分量中。

在处理地图时,代码会记录小华和小为的位置,以及所有聚餐地点的位置。然后,遍历地图上的每个单元格,如果单元格不是障碍物,则将其与相邻的非障碍物单元格合并(在并查集中的术语是“union”)。

接着,代码会找到小华和小为所在连通分量的根节点,并检查这两个根节点是否相同。如果不同,则表示小华和小为无法到达同一个聚餐地点,返回0

如果小华和小为在同一个连通分量中,代码将继续遍历所有聚餐地点,并检查每个地点是否也在该连通分量中。如果在,计数器ans会增加。

最后,返回计数器ans作为结果。

package OD154;import java.util.Scanner;
import java.util.StringJoiner;/*** @description 字符串分隔(二)* @level 6*//*** 题目描述* 给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。* <p>* 对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;* <p>* 反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。* <p>* 输入描述* 输入为两行,第一行为参数K,第二行为字符串S。* <p>* 输出描述* 输出转换后的字符串。*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//分隔子串的长度int n = Integer.parseInt(sc.nextLine());//原始子串String s = sc.nextLine();System.out.println(solution(s, n));}//将字符串按k长度分隔,中间添加"-",并转换大小写public static String solution(String s, int k) {String[] strs = s.split("-");StringBuilder sb = new StringBuilder();StringJoiner  sj = new StringJoiner("-");//第一个直接加sj.add(strs[0]);//把剩下的字符串合并成一个新字符串for (int i = 1; i < strs.length; i++) {sb.append(strs[i]);}String newStr = sb.toString();//把剩下的字符串按k个分组,最后一组是到末尾结束for (int i = 0; i < newStr.length(); i += k) {String sub = newStr.substring(i, Math.min(i + k, newStr.length()));//转换大小写后添加进sjsj.add(change(sub));}return sj.toString();}//将字符串根据大小写数量转换大小写public static String change(String s) {int upper = 0;int lower = 0;for (int i = 0; i < s.length(); i++) {if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') {upper++;}else if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') {lower++;}}//如果大写多if (upper > lower) {return s.toUpperCase();}else if (lower > upper) {return s.toLowerCase();}else {return s;}}
}
package OD197;import java.util.ArrayList;
import java.util.Scanner;/*** @description 欢乐的周末* @level 7* @score 100* @url https://hydro.ac/d/HWOD2023/p/OD197*//*** 题目描述* 小华和小为是很要好的朋友,他们约定周末一起吃饭。* <p>* 通过手机交流,他们在地图上选择了多个聚餐地点(由于自然地形等原因,部分聚餐地点不可达),求小华和小为都能到达的聚餐地点有多少个?* <p>* 输入描述* 第一行输入m和n,m代表地图的长度,n代表地图的宽度。* <p>* 第二行开始具体输入地图信息,地图信息包含:* <p>* 0 为通畅的道路* <p>* 1 为障碍物(且仅1为障碍物)* <p>* 2 为小华或者小为,地图中必定有且仅有2个 (非障碍物)* <p>* 3 为被选中的聚餐地点(非障碍物)* <p>* 输出描述* 可以被两方都到达的聚餐地点数量,行末无空格。*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {//位移偏量static int[][] offsets = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};private static int rows;private static int cols;private static int[][] matrix;public static void main(String[] args) {Scanner sc = new Scanner(System.in);//长 宽rows = sc.nextInt();cols = sc.nextInt();//2是人位置  1是障碍物  3是聚餐地点matrix = new int[rows][cols];for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {matrix[i][j] = sc.nextInt();}}//输出:能共同到达的餐厅数量System.out.println(getResult());}public static int getResult() {//并查集UnionFindSet ufs = new UnionFindSet(rows * cols);//记录小华、小为的位置ArrayList<Integer> address = new ArrayList<>();//记录餐厅的位置ArrayList<Integer> restaurants = new ArrayList<>();//遍历每一个起点for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {//把除了障碍物之外的都连通if (matrix[i][j] != 1) {//如果不是障碍物,转为一维坐标posint pos = i * cols + j;//如果是小华、小为if (matrix[i][j] == 2) {address.add(pos);} else if (matrix[i][j] == 3) {restaurants.add(pos);}for (int[] offset : offsets) {int newI = i + offset[0];int newJ = j + offset[1];//如果没越界,且不是障碍物if (newI >= 0 && newI < rows && newJ >= 0 && newJ < cols && matrix[newI][newJ] != 1) {//如果(i,j)和(newI,newJ)的位置都是非1,则合并,都转一维坐标ufs.union(pos, newI * cols + newJ);}}}}}//小华所在连通分量的根int hua_fa = ufs.find(address.get(0));//小为int wei_fa = ufs.find(address.get(1));//如果不属于同一个分量,则无法去同一家餐厅if (hua_fa != wei_fa) {return 0;}//记录题解:共同能到达的餐厅数量int ans = 0;for (Integer restaurant : restaurants) {if (ufs.find(restaurant) == hua_fa) {ans++;}}return ans;}}//实现并查集
class UnionFindSet {int[] fa;public UnionFindSet(int n) {fa = new int[n];for (int i = 0; i < n; i++) {fa[i] = i;}}public int find(int x) {if (x != this.fa[x]) {this.fa[x] = this.find(this.fa[x]);return this.fa[x];}return x;}public void union(int x, int y) {int x_fa = this.find(x);int y_fa = this.find(y);if (x_fa != y_fa) {this.fa[y_fa] = x_fa;}}
}

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

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

相关文章

Java面试题-Tomcat高级面试题

Tomcat 9相较于之前的版本有哪些主要的新特性&#xff1f; Tomcat 9相较于之前的版本&#xff0c;主要有以下几个新特性&#xff1a; HTTP/2支持&#xff1a;Tomcat 9引入了对HTTP/2协议的支持&#xff0c;这可以显著提高网站的性能和安全性。HTTP/2协议允许单个连接上进行多…

多语言for循环遍历总结

多语言for循环遍历总结 工作中经常需要遍历对象&#xff0c;但不同编程语言之间存在一些细微差别。为了便于比较和参考&#xff0c;这里对一些常用的遍历方法进行了总结。 JAVA 数组遍历 Test void ArrayForTest() {String[] array {"刘备","关羽", &…

大模型备案项目补贴政策一览【保持更新】

大模型项目、AI类项目、大模型备案通过后等一篮子财政补贴政策 上海市 加快创新体系构建 1. 提升自主创新水平&#xff1a;对引领大模型发展或取得颠覆性突破的项目&#xff0c;最高给予1000万元补贴支持。 2. 加强算力资源保障&#xff1a;实施算力伙伴计划&#xff0c;对…

力扣174题动态规划:地下城游戏(含模拟面试)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业…

Java进阶学习笔记36——算法

什么是算法&#xff1f; 解决某个实际问题的过程和方法。 1&#xff09;导航&#xff1b; 2&#xff09;滴滴打车&#xff1b; 3&#xff09;抖音&#xff1b; 不同的算法&#xff0c;效率高、性能好&#xff01; 在Java中&#xff0c;代码已经帮我们写好了&#xff0c;但为…

雪花算法详解及源码分析

雪花算法的简介&#xff1a; 雪花算法用来实现全局唯一ID的业务主键&#xff0c;解决分库分表之后主键的唯一性问题&#xff0c;所以就单从全局唯一性来说&#xff0c;其实有很多的解决方法&#xff0c;比如说UUID、数据库的全局表的自增ID 但是在实际的开发过程中&#xff0…

离散点云拟合三维平面参数推导(基于最小二乘)

1、背景介绍 实际中&#xff0c;很多人工构造物是由平面结构构造而成&#xff0c;如下图所示&#xff0c;为一典型的由多个平面组成的人工构筑物。因此&#xff0c;根据离散点拟合成平面&#xff0c;获取拟合平面方程&#xff0c;是点云数据处理中非常常见的数据处理操作。 2、…

鸿蒙Ability Kit(程序框架服务)【ExtensionAbility组件】

ExtensionAbility组件 ExtensionAbility组件是基于特定场景&#xff08;例如服务卡片、输入法等&#xff09;提供的应用组件&#xff0c;以便满足更多的使用场景。 每一个具体场景对应一个[ExtensionAbilityType]&#xff0c;开发者只能使用&#xff08;包括实现和访问&#…

WPS的excel表格设置了编辑权限,要怎么取消?

在日常生活和工作中&#xff0c;我们经常会使用WPS Office办公软件来处理各种文档&#xff0c;其中WPS Excel表格是我们进行数据处理和分析的重要工具。为了保护表格中的数据不被随意修改&#xff0c;我们有时会设置编辑权限。然而&#xff0c;随着时间的推移或需求的变更&…

基于FPGA的SystemVerilog练习

文章目录 一、认识SystemVerilogSystemVerilog的语言特性SystemVerilog的应用领域SystemVerilog的优势SystemVerilog的未来发展方向 二、流水灯代码流水灯部分testbench仿真文件 三、用systemVerilog实现超声波测距计时器测距部分led部分数码管部分采样部分顶层文件引脚绑定效果…

鲁教版七年级数学下册-笔记

文章目录 第七章 二元一次方程组1 二元一次方程组2 解二元一次方程组3 二元一次方程组的应用4 二元一次方程与一次函数5 三元一次方程组 第八章 平行线的有关证明1 定义与命题2 证明的必要性3 基本事实与定理4 平行线的判定定理5 平行限的性质定理6 三角形内角和定理 第九章 概…

dpdk uio整体分析及网卡加载

参考:https://zhuanlan.zhihu.com/p/477600165 一、Linux内核知识点 1. __attribute__ constructor/destructor (1)若函数被设定为constructor属性,则该函数会在 main()函数执行之前被自动的执行。 (2)若函数被设定为destructor属性,则该函数会在main()函数执…

开发和渗透偷懒利器utools

目录 1.前言 1.1 工具简介 1.2 核心特性 1.3 使用场景 1.4 安装与使用 1.4.1 下载&#xff1a; 1.4.2 安装&#xff1a; 1.4.3 配置&#xff1a; 1.4.4 插件市场&#xff1a; 2.懒狗插件介绍 基本介绍 2.1 数据模拟 2.2 随机生成虚假数据 2.3 API市场 2.4 Hoppscot…

【十二】图解mybatis日志模块之设计模式

图解mybatis日志模块之设计模式 概述 最近经常在思考研发工程师初、中、高级工程师以及系统架构师各个级别的工程师有什么区别&#xff0c;随着年龄增加我们的技术级别也在提升&#xff0c;但是很多人到了高级别反而更加忧虑&#xff0c;因为it行业35岁年龄是个坎这是行业里的共…

一文读懂数据库中的DB、DBMS、DBS、DBAS

目前数据库的应用非常广泛,几乎各行各业都在直接或间接地与数据库打交道,例如网上购物、银行业务、铁路购票和酒店住宿等。在实际应用中,数据库、数据库管理系统、数据库系统和数据库应用系统经常被统称为数据库,而实质上这4个概念是不一样的,它们具有不同的定义和含义。下…

暴力数据结构之排序大杂烩

1. 冒泡排序&#xff1a;O(N^2) 逻辑解析&#xff1a; 冒泡排序并没有什么实际意义&#xff0c;但是有教学意义&#xff0c;相信大部分小白在学习的初期第一个接触的排序就是冒泡排序。那么接下来我们了解一下他的底层逻辑&#xff1a; 冒泡排序顾名思义就是将最大&#xff08…

PID——调参的步骤

第一步&#xff1a;确定比例增益P 确定比例增益 P 时&#xff0c;首先去掉 PID 的积分项和微分项&#xff0c;一般是令 Ti0、 Td0&#xff08;具体见PID 的参数设定说明&#xff09;&#xff0c;使PID 为纯比例调节。 输入设定为系统允许的最大值60%~70%&#xff0c;由0逐渐加…

idea项目maven下载依赖报错

报错&#xff1a; 1、Failure to find bad.robot:simple-excel:jar:1.0 in https://maven.aliyun.com/repository/public was cached in the local repository, resolution will not be reattempted until the update interval of aliyunmaven has elapsed or updates are forc…

python的while循环与for循环总结

前两章中&#xff0c;我们跟着海绵宝宝的故事&#xff0c;掌握了 while 循环和 for 循环&#xff0c;这两种不同的循环模式。while 循环和 for 循环都需要有 循环体 和 缩进&#xff0c;我们来复习一下它俩的语法规则&#xff1a; while 循环与 for 循环辨析 学到这里&#x…

Microsoft Edge TTS引擎实现文字转语音小工具

Microsoft Edge TTS引擎实现文字转语音小工具 ​ 看了一篇文章关于使用Microsoft Edge TTS引擎进行文本转语音的介绍。正好单位工作上经常用到音视频的制作和转换。但是文字变成音频一直都是播音员口播实现。现在到了AI时代,各种功能强大的AI大模型已经应用到各个领域,大大提…