题目要求
分析
这题最令我崩溃的是各种特殊情况,特别是结尾部分的处理。
p1、p2、p3 的操作要处理好,但真正恶心的就是如何判断是可以处理的。
- 数值和字母不能补全
- 两边相同的数字or字母不能补全
- 左边大于右边不能补全
- 连续-号无效
- ……
获取的测试数据
(由于题做完很久,所以不记得Debug的过程了,抱歉,只能分享一些测试数据啦)
测试数据2
in
1 1 1
abcde
out
abcde
测试数据4
in
2 2 2
9-a-a
out
9-a-a
测试数据5
in
1 5 1
-254-243-52-345-243-5234-52-345-234-52-345-234-52345-4325-2345-2345-2345
out
-254-2434444452345-24344444523452345-23452345-23452345-4325-2345-2345-2345
测试数据6
in
1 1 1
2-43-sdf-ewr0-j-9re-j0g-9e0-9as-d09jf-9asdjf0q-w-ejr0q-59jdsnf-9z-x9v0-sd9fn--q
out
2343-sdf-ewr0-j-9refghij0g-9e0123456789as-d09jf-9asdjf0qrstuvw-ejr0q-59jdsnf-9z-x9v0-sd9fn--q
AC代码(Java语言描述)
import java.util.Scanner;
public class Main {
private static boolean isTypeEqual(char var1, char var2) {
return (var1 < var2) && ((Character.isDigit(var1) && Character.isDigit(var2)) ||
(Character.isLowerCase(var1) && Character.isLowerCase(var2)));
}
private static void generateAppendString(char from, char to, StringBuilder result, int times,
boolean isStar, boolean isUpper, boolean isReversed) {
if (isReversed) {
for (char i = (char)(to-1); i > from; i--) {
char add = isStar ? '*' : (Character.isDigit(i) ? i : ((isUpper ? (char)(i-32) : i)));
for (int j = 0; j < times; j++) {
result.append(add);
}
}
} else {
for (char i = (char)(from+1); i < to; i++) {
char add = isStar ? '*' : (Character.isDigit(i) ? i : ((isUpper ? (char)(i-32) : i)));
for (int j = 0; j < times; j++) {
result.append(add);
}
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int p1 = scanner.nextInt(), p2 = scanner.nextInt(), p3 = scanner.nextInt();
boolean isStar = p1 == 3;
boolean isUpper = p1 == 2;
boolean isReversed = p3 == 2;
String line = scanner.next();
scanner.close();
StringBuilder result = new StringBuilder();
char[] chars = line.toCharArray();
for (int i = 0; i < line.length()-2; i++) {
result.append(chars[i]);
if (chars[i+1] == '-') {
if (isTypeEqual(chars[i], chars[i+2])) {
generateAppendString(chars[i], chars[i+2], result, p2, isStar, isUpper, isReversed);
++i;
} else {
result.append(chars[++i]);
}
}
}
if (chars[line.length()-2] != '-' || chars[line.length()-3] == '-') {
result.append(chars[line.length()-2]);
}
result.append(chars[line.length()-1]);
System.out.println(result);
}
}