華為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.pswp.cn/bicheng/21887.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21887.shtml
英文地址,請注明出處:http://en.pswp.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大模型已經應用到各個領域,大大提…