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

打印 上一主题 下一主题

主题 807|帖子 807|积分 2421

前言

        工作了十几年,从平凡的研发工程师一路成长为研发司理、研发总监。邻近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实现

  1. package huawei.e100;
  2. import java.util.Scanner;
  3. /**
  4. * @author arnold
  5. * @date 2024年12月21日
  6. * 字符串分割
  7. */
  8. public class T32 {
  9.         public static void main(String[] args) {
  10.                 Scanner sc = new Scanner(System.in);
  11.                 while(sc.hasNext()) {
  12.                         int index = sc.nextInt();
  13.                         sc.nextLine();
  14.                         String str = sc.nextLine();
  15.                         String res = run(str, index);
  16.                         System.out.println(res);
  17.                 }
  18.         }
  19.        
  20.         static String run(String str, int k) {
  21.                 String[] tmps = str.split("-");
  22.                 StringBuilder sb = new StringBuilder();
  23.                 sb.append(tmps[0]);
  24.                
  25.                 StringBuilder sb1 = new StringBuilder();
  26.                 for (int i = 1; i < tmps.length; i++) {
  27.                         sb1.append(tmps[i]);
  28.                 }
  29.                 String newStr = sb1.toString();
  30.                 int num = newStr.length()/k +1;
  31.                 for (int i = 0; i < num; i++) {
  32.                         String item = newStr.substring(k*i, Math.min(k*i + k, newStr.length()));
  33.                         int low = 0, up = 0;
  34.                         for (int j = 0; j < item.length(); j++) {
  35.                                 if(item.charAt(j) >= 'a' && item.charAt(j) <= 'z') {
  36.                                         low ++;
  37.                                 } else if(item.charAt(j) >= 'A' && item.charAt(j) <= 'Z') {
  38.                                         up ++;
  39.                                 }
  40.                         }
  41.                         if (up > low) {
  42.                                 sb.append("-").append(item.toUpperCase());
  43.                         } else if (up == low) {
  44.                                 sb.append("-").append(item);
  45.                         } else {
  46.                                 sb.append("-").append(item.toLowerCase());
  47.                         }
  48.                 }
  49.                 return sb.toString();
  50.         }
  51. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表