描述
【一种 字符串压缩只 表示的解压】
有一种简易 压缩算法Q:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。
例如:字符串“aaabbccccd”经过压缩成为字符串“3abb4cd”。请您编写解压函数,根据输入的字符串,判断其是否为合法压缩过的字符串若输入合法则输出解压缩后的字符串,否则输出字符串“!error”来报告错误。
输入描述
输入一行,为一个ASCII字符串,长度不会超过100字符,用例保证输出的字符串长度也不会超过100字符输出描述
若判断输入为合法的经过压缩后的字符串,则输出压缩前的字符串;若输入不合法,则输出字符串"!error”
用例:
输入:4dff
输出:ddddff
输入:4d2f
输出:!error
实现(开箱即用)
package com.des.data.test;
import jodd.util.StringUtil;
public class SolutionStringCompressionRepresentation {
public static void main(String[] args) {
String str1 = "4dff";
String str2 = "";
System.out.println(solution(str1));
}
public static String solution(String str) {
if (StringUtil.isBlank(str) || !checkStr(str)) {
return "!error";
}
StringBuffer strpen = new StringBuffer();
int tag = 0;
for (int i = 0; i < str.length(); i++) {
char inc = str.charAt(i);
if (Character.isDigit(inc)) {
if (i + 1 > str.length()) {
break;
}
char incNext = str.charAt(i + 1);
tag = i + 1;
int incjl = Integer.parseInt(String.valueOf(inc));
for (int j = 0; j < incjl; j++) {
strpen.append(incNext);
}
} else {
if (tag == i) {
tag = 0;
continue;
}
strpen.append(inc);
}
}
return strpen.toString();
}
private static boolean checkStr(String str) {
if (str.contains("2")) {
return false;
}
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (!(Character.isDigit(c) || Character.isLowerCase(c))) {
return false;
}
}
return true;
}
}