华为OD E卷(100分)32-字符串分割

前言

工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

给定一个非空字符串S,其被N个'-'分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用'-'分隔。对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。

输入

输入为两行,第一行为参数K,第二行为字符串S。

输出

输出转换后的字符串。

示例

示例1

输入

3

12abc-abCABc-4aB@
输出

12abc-abc-ABC-4aB-@

说明

子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每3个字符一组为abC、ABc、4aB、@,abC中小写字母较多,转换为abc,ABc中大写字母较多,转换为ABC,4aB中大小写字母都为1个,不做转换,@中没有字母,连起来即12abc-abc-ABC-4aB-@

示例2

输入

12

12abc-abCABc-4aB@
输出

12abc-abCABc4aB@

说明

子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每12个字符一组为abCABc4aB@,这个子串中大小写字母都为4个,不做转换,连起来即12abc-abCABc4aB@

题解

Java实现

java 复制代码
package huawei.e100;

import java.util.Scanner;

/**
* @author arnold
* @date 2024年12月21日
* 字符串分割
*/
public class T32 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int index = sc.nextInt();
			sc.nextLine();
			String str = sc.nextLine();
			String res = run(str, index);
			System.out.println(res);
		}

	}
	
	static String run(String str, int k) {
		String[] tmps = str.split("-");
		StringBuilder sb = new StringBuilder();
		sb.append(tmps[0]);
		
		StringBuilder sb1 = new StringBuilder();
		for (int i = 1; i < tmps.length; i++) {
			sb1.append(tmps[i]);
		}
		String newStr = sb1.toString();
		int num = newStr.length()/k +1;
		for (int i = 0; i < num; i++) {
			String item = newStr.substring(k*i, Math.min(k*i + k, newStr.length()));
			int low = 0, up = 0;
			for (int j = 0; j < item.length(); j++) {
				if(item.charAt(j) >= 'a' && item.charAt(j) <= 'z') {
					low ++;
				} else if(item.charAt(j) >= 'A' && item.charAt(j) <= 'Z') {
					up ++;
				}
			}
			if (up > low) {
				sb.append("-").append(item.toUpperCase());
			} else if (up == low) {
				sb.append("-").append(item);
			} else {
				sb.append("-").append(item.toLowerCase());
			}
		}
		return sb.toString();
	}

}
相关推荐
康谋自动驾驶几秒前
拆解3D Gaussian Splatting:原理框架、实战 demo 与自驾仿真落地探索!
算法·数学建模·3d·自动驾驶·汽车
violet-lz1 小时前
数据结构八大排序:希尔排序-原理解析+C语言实现+优化+面试题
数据结构·算法·排序算法
ezl1fe1 小时前
第一篇:把任意 HTTP API 一键变成 Agent 工具
人工智能·后端·算法
冯诺依曼的锦鲤1 小时前
算法练习:双指针专题
c++·算法
吃着火锅x唱着歌1 小时前
LeetCode 668.乘法表中第k小的数
算法·leetcode·职场和发展
前端小刘哥1 小时前
互联网直播点播平台EasyDSS流媒体技术如何赋能多媒体展厅智能化升级?
算法
Python算法实战2 小时前
平安大模型面试题:Self-Attention 原理与多头注意力设计
人工智能·算法·自然语言处理·大模型·面试题
Python算法实战2 小时前
腾讯送命题:手写多头注意力机制。。。
人工智能·算法·面试·大模型·强化学习
前端小刘哥2 小时前
现场直播的技术革新者:视频直播点播平台EasyDSS在现场直播场景中的技术应用
算法
violet-lz2 小时前
数据结构八大排序:堆排序-从二叉树到堆排序实现
数据结构·算法