【算法题】字符串分割

541次阅读
没有评论

共计 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);
    }
}
正文完
 0
裴先生
版权声明:本站原创文章,由 裴先生 2022-05-01发表,共计1624字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
本站勉强运行: