字节跳动青训营——入营考核解答(持续更新中~~~)

AI 加码,字节跳动青训营,等待您的加入~

1、报名方式

  1. 点击以下链接:字节跳动青训营报名入口
  2. 扫描图片二维码:在这里插入图片描述

2、考核内容

在指定的题库中自主选择不少于 15 道算法题并完成解题,其中题目难度分配如下:

  • 简单题不少于 10 道
  • 中等题不少于 4 道
  • 困难题不少于 1 道

解答代码

85. 字符串字符类型排序问题(简单)

代码实现:

import java.util.ArrayList;
import java.util.List;
import java.util.Comparator;

public class Main {
    public static String solution(String inp) {
        // 首先,将输入字符串拆分成字符数组
        char[] charArray = inp.toCharArray();

        // 分别创建用于存储数字、字母和问号的列表
        List<Character> numbers = new ArrayList<>();
        List<Character> letters = new ArrayList<>();
        List<Integer> questionMarkIndices = new ArrayList<>();

        // 遍历字符数组,将数字、字母和问号分别存储到对应的列表中,并记录问号的位置
        for (int i = 0; i < charArray.length; i++) {
            char c = charArray[i];
            if (Character.isDigit(c)) {
                numbers.add(c);
            } else if (Character.isAlphabetic(c)) {
                letters.add(c);
            } else if (c == '?') {
                questionMarkIndices.add(i);
            }
        }

        // 对数字列表进行从大到小排序
        numbers.sort((a, b) -> b - a);

        // 对字母列表进行字典序排序
        letters.sort(Comparator.naturalOrder());

        // 重新构建输出字符串
        StringBuilder output = new StringBuilder();
        int numIndex = 0;
        int letterIndex = 0;
        for (int i = 0; i < charArray.length; i++) {
            if (questionMarkIndices.contains(i)) {
                output.append('?');
            } else if (Character.isDigit(charArray[i])) {
                output.append(numbers.get(numIndex++));
            } else if (Character.isAlphabetic(charArray[i])) {
                output.append(letters.get(letterIndex++));
            }
        }

        return output.toString();
    }

    public static void main(String[] args) {
        // Add your test cases here

        System.out.println(solution("12A?zc").equals("21A?cz"));
        System.out.println(solution("1Ad?z?t24").equals("4Ad?t?z21"));
        System.out.println(solution("???123??zxy?").equals("???321??xyz?"));
    }
}

运行结果在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值