字符串的展开(洛谷P1098题题解,Java语言描述)
生活随笔
收集整理的這篇文章主要介紹了
字符串的展开(洛谷P1098题题解,Java语言描述)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目要求
P1098題目鏈接
分析
這題最令我崩潰的是各種特殊情況,特別是結尾部分的處理。
p1、p2、p3 的操作要處理好,但真正惡心的就是如何判斷是可以處理的。
- 數值和字母不能補全
- 兩邊相同的數字or字母不能補全
- 左邊大于右邊不能補全
- 連續-號無效
- ……
獲取的測試數據
(由于題做完很久,所以不記得Debug的過程了,抱歉,只能分享一些測試數據啦)
測試數據2
in
out
abcde測試數據4
in
out
9-a-a測試數據5
in
out
-254-2434444452345-24344444523452345-23452345-23452345-4325-2345-2345-2345測試數據6
in
out
2343-sdf-ewr0-j-9refghij0g-9e0123456789as-d09jf-9asdjf0qrstuvw-ejr0q-59jdsnf-9z-x9v0-sd9fn--qAC代碼(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);} }總結
以上是生活随笔為你收集整理的字符串的展开(洛谷P1098题题解,Java语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巧用Calendar求解黑色星期五问题(
- 下一篇: 【Java】Kryo运行报错:Excep