代码如下:
import java.util.*;
public class JavaTest {
public static void main(String[] args) {
String testStr1="aaaadadacccmcmcm";
String zipStr = zipOrUnZipStr(testStr1);
System.out.println(zipStr);
String testStr2="mm3c4f3daa";
String unzipStr = zipOrUnZipStr(testStr2);
System.out.println(unzipStr);
}
public static String zipOrUnZipStr(String srcStr){
if (srcStr==null || srcStr.isEmpty()){
return "!error";
}
if (srcStr.length()>100){
return "!error";
}
for (int i = 0; i < srcStr.length(); i++) {
char charTemp = srcStr.charAt(i);
if (Character.isUpperCase(charTemp)){
return "!error";
}
if (!(charTemp>='a' && charTemp <= 'z' || charTemp > '2')){
return "!error";
}
}
HashMap characterCntMap = new HashMap<>();
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder1 = new StringBuilder();
//mm3c4f3daa-> mmcccffffdddaa
for (int i = 0; i < srcStr.length(); i++) {
char charTemp = srcStr.charAt(i);
if (Character.isDigit(charTemp) && charTemp > '2'){
char charAt = srcStr.charAt(i + 1);
int intCnt = Integer.parseInt(String.valueOf(charTemp));
for (int j = 0; j < intCnt; j++) {
stringBuilder.append(charAt);
}
}else{
if (i>0){
char charAt = srcStr.charAt(i - 1);
if (!(Character.isDigit(charAt) && charAt > '2')){
stringBuilder.append(charTemp);
}
}else {
stringBuilder.append(charTemp);
}
if (characterCntMap.containsKey(charTemp)){
characterCntMap.put(charTemp,characterCntMap.get(charTemp)+1);
}else {
characterCntMap.put(charTemp,1);
}
}
}
//mmmmmmmmmaaccddddfff {a=2, c=2, d=3, f=3, m=9}
//aaaaddcaccmmm-> 4a2d3c3m
LinkedHashSet linkedHashSet = new LinkedHashSet<>();
for (int j = 0; j < srcStr.length(); j++) {
char charAt = srcStr.charAt(j);
linkedHashSet.add(charAt);
}
for (Character e : linkedHashSet) {
Integer integerCnt = characterCntMap.get(e);
if (integerCnt!=null){
if (integerCnt>2){
stringBuilder1.append(integerCnt);
stringBuilder1.append(e);
}else {
for (int i = 0; i < integerCnt; i++) {
stringBuilder1.append(e);
}
}
}
}
for (int i = 0; i < srcStr.length(); i++) {
char charAt = srcStr.charAt(i);
if (Character.isDigit(charAt) && charAt > '2'){
String retUnZipStr = stringBuilder.toString();
if (retUnZipStr.length()>100){
return "!error";
}else {
return retUnZipStr;
}
}
}
return stringBuilder1.toString();
}
}
总结
提示:这里只是实现顺序叠加字符串压缩压缩或者解压缩字符串 aaaaddcccmmm-> 4a2d3c3m 3c4f3d-> cccffffddd
aaadadcccmmm-> 4a2d3c3m
4a2d3c3m->aaadadcccmmm
这怎么实现呢?



