【算法题】字符串分割

  • A+
所属分类:编程茶楼


共计 1624 个字符,预计需要花费 5 分钟才能阅读完成。

import java.util.Scanner;

/**
 * 标题:字符串分割 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
 * 给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
 * 对于新组成的每一个子串,如果它含有的小写字母大写字母多,则将这个子串的所有大写字母转换为小写字母;
 * 反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。
 * <p>
 * 输入为两行,第一行为参数K,第二行为字符串S。
 * 输出描述:
 * 输出转换后的字符串。
 * <p>
 * 示例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-@
 * <p>
 * 示例2
 * 输入
 * 12
 * 12abc-abCABc-4aB@
 * 输出
 * 12abc-abCABc4aB@
 * 说明
 * 子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每12个字符一组为abCABc4aB@,这个子串中大小写字母都为4个,不做转换,连起来即12abc-abCABc4aB@
 *
 * @since 2022年4月30日
 */
public class M_N_T_17 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String K = scanner.nextLine();
        String S = scanner.nextLine();

        String[] strings = S.split("-");

        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 1; i < strings.length; i++) {
            stringBuilder.append(strings[i]);
        }

        char[] chars = stringBuilder.toString().toCharArray();

        int k = Integer.parseInt(K);
        int num = chars.length / k;
        int mo = chars.length % k;

        StringBuilder finalStr = new StringBuilder();
        int len = 0;
        for (int i = 0; i <= num; i++) {
            len += (i + 1) * k <= num * k ? k : mo;
            StringBuilder tempStr = new StringBuilder();
            int countUp = 0;
            int countDo = 0;
            for (int j = i * k; j < len; j++) {
                if (65 <= chars[j] && chars[j] <= 90) {
                    countUp++;
                }
                if (97 <= chars[j] && chars[j] <= 122) {
                    countDo++;
                }
                tempStr.append(chars[j]);
            }

            if (countUp > countDo) {
                finalStr.append("-").append(tempStr.toString().toUpperCase());
            } else if (countUp == countDo) {
                finalStr.append("-").append(tempStr);
            } else {
                finalStr.append("-").append(tempStr.toString().toLowerCase());
            }
        }

        System.out.println(strings[0] + finalStr);
    }
}
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: