【5】基本字符串压缩

  • 格式:pdf
  • 大小:43.90 KB
  • 文档页数:2

【5】基本字符串压缩

【题⽬】

利⽤字符重复出现的次数,编写⼀个⽅法,实现基本的字符串压缩功能。⽐如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。

给定⼀个string iniString为待压缩的串(长度⼩于等于10000),保证串内字符均由⼤⼩写英⽂字母组成,返回⼀个string,为所求的压缩后或未变化的串。

测试样例

"aabcccccaaa"

返回:"a2b1c5a3"

"welcometonowcoderrrrr"

返回:"welcometonowcoderrrrr

【代码】

import java.util.*;

public class Zipper {

public String zipString(String iniString) {

if(iniString == null || iniString.length() <= 0){

return iniString;

}

Map map = new HashMap<>();

int len = iniString.length();

StringBuilder sb = new StringBuilder(len);

int count = 0;

int index1 = 0;

int index2 = 1;

for(int i = 0; i < len; i++){

if(index2 < len && (iniString.charAt(index1) == iniString.charAt(index2))){

index2++;

}else{

count = index2 - index1;

sb.append(iniString.charAt(index1)).append(count);

index1 = index2;

index2 = index1 + 1;

}

}

if(sb.length() >= len){

return iniString;

}

return sb.toString();

}

}

【题⽬2】

“aaabccccdeff”处理为”a3bc4def2”,请编写程序。

只有⼀个字符不需要写数字。

【代码】

package 远景能源;

import java.util.*;

/**

* “aaabccccdeff”处理为”a3bc4def2”,请编写程序。

* @author GenshenWang.nomico

*

*/

public class Zipper {

public static String zipString(String iniString) {

if(iniString == null || iniString.length() <= 0){

return iniString;

}

Map map = new HashMap<>();

int len = iniString.length();

StringBuilder sb = new StringBuilder(len);

int count = 0;

int index1 = 0;

int index2 = 1;

for(int i = 0; i < len; i++){

char c = iniString.charAt(index1); if(index2 < len && iniString.charAt(index2) == c){

index2++;

} else{

count = index2 - index1;

index1 = index2;

index2++;

sb.append(c);

if(count > 1){

sb.append(count);

}

}

}

return sb.toString();

}

public static void main(String[] args) {

System.out.println(zipString("aaabccccdeff"));

}

}