AI 加码,字节跳动青训营,等待您的加入~
1、报名方式
- 点击以下链接:字节跳动青训营报名入口
- 扫描图片二维码:
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?"));
}
}
运行结果: