题目描述

给定一个非空字符串S,其被N'-'分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并'-'分隔。

对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。

输入描述

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

输出描述

输出转换后的字符串。

用例

输入

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-@

输入

12
12abc-abCABc-4aB@

输出

12abc-abCABc4aB@

说明

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

解题思路

字符串分割:

  • 给定字符串 S 使用 - 进行分割,分割后得到多个子串。 分割后的子串处理:

保持第一个子串不变。

  • 对于后续每个子串,按照给定的 K 将它分成多个子串,每个新的子串最多包含 K 个字符。

字母大小写转换:

  • 对每个新组成的子串,计算小写字母和大写字母的数量:

  • 如果小写字母多,则将所有大写字母转换为小写字母。

  • 如果大写字母多,则将所有小写字母转换为大写字母。

  • 如果大小写字母数量相等,则不进行任何转换。

拼接处理后的子串:

  • 最终将所有处理后的子串按 - 拼接起来,得到最终的结果。

代码实现

import java.util.*;

public class StringTransformation {
    
    // 方法:处理每个子串并转换大小写
    public static String transformSubstring(String s) {
        int lowercaseCount = 0;
        int uppercaseCount = 0;
        
        // 计算小写字母和大写字母的数量
        for (char c : s.toCharArray()) {
            if (Character.isLowerCase(c)) {
                lowercaseCount++;
            } else if (Character.isUpperCase(c)) {
                uppercaseCount++;
            }
        }
        
        // 根据字母数量决定转换
        if (lowercaseCount > uppercaseCount) {
            // 小写字母多,将大写字母转换为小写
            return s.toLowerCase();
        } else if (uppercaseCount > lowercaseCount) {
            // 大写字母多,将小写字母转换为大写
            return s.toUpperCase();
        } else {
            // 大小写字母相等,不做转换
            return s;
        }
    }

    // 方法:分割并处理字符串
    public static String processString(int K, String S) {
        // 按照'-'分割字符串
        String[] parts = S.split("-");
        
        // 第一个子串保持不变
        StringBuilder result = new StringBuilder(parts[0]);
        
        // 处理剩下的子串
        for (int i = 1; i < parts.length; i++) {
            String subString = parts[i];
            List<String> chunks = new ArrayList<>();
            
            // 将每个子串按K个字符进行分割
            for (int j = 0; j < subString.length(); j += K) {
                int end = Math.min(j + K, subString.length());
                chunks.add(subString.substring(j, end));
            }
            
            // 对每个子串进行转换并拼接
            for (String chunk : chunks) {
                result.append("-");
                result.append(transformSubstring(chunk));
            }
        }
        
        return result.toString();
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取K值
        int K = Integer.parseInt(scanner.nextLine().trim());
        
        // 读取字符串S
        String S = scanner.nextLine().trim();
        
        // 处理字符串并输出结果
        String result = processString(K, S);
        System.out.println(result);
        
        scanner.close();
    }
}