package com.zsl.common.util;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 输入一串字符,请编写一个字符串压缩程序,将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。
* 例如:
* aac 压缩为 1ac
* xxxxyyyyyyzbbb 压缩为 3x5yz2b
*
* 针对问题采用的数据结构很重要
* */
public class StringCompress {
public static void main(String[] args) {
String text="xxxxyyyyyybbbcccc";
System.out.println("错误做法:"+compress1(text));
System.out.println("正确做法:"+compress(text));
}
/**
* 这个方法用LinkedHashMap装,导致重复数据会被覆盖
* */
public static String compress1(String str){
if(str!=null&&str!=""){
char[] chars=str.toCharArray();
LinkedHashMap<Character,Integer> map=new LinkedHashMap<>();
char nowChar;
char nextChar;
for (int i = 0; i <chars.length ; i++) {
int count=0;
nowChar=chars[i];
System.out.println(i);
if(i==chars.length-1){
map.put(nowChar,count);
break;
}
for (int j = i+1; j <chars.length ; j++) {
nextChar=chars[j];
if(nowChar==nextChar){
count+=1;
if(j==chars.length-1){
map.put(nowChar,count);
i=chars.length;
}
}else{
i=i+count;
map.put(nowChar,count);
break;
}
}
}
System.out.println(map);
StringBuffer stringBuffer=new StringBuffer();
map.forEach((key,value)->{
if(value!=0){
stringBuffer.append(value);
stringBuffer.append(key);
}else{
stringBuffer.append(key);
}
});
return stringBuffer.toString();
}else{
return str;
}
}
/**
* LinkedHashMap<Integer, Map<Character,Integer>>
* 正确的做法
* */
public static String compress(String str){
char[] chars=str.toCharArray();
LinkedHashMap<Integer, Map<Character,Integer>> resultMap=new LinkedHashMap<>();
char nowChar;
char nextChar;
int index=0;
for (int i = 0; i <chars.length ; i++) {
Map<Character,Integer> map=new HashMap<>();
index+=1;
int count=0;
nowChar=chars[i];
if(i==chars.length-1){
map.put(nowChar,count);
resultMap.put(index,map);
break;
}
for (int j = i+1; j <chars.length ; j++) {
nextChar=chars[j];
if(nowChar==nextChar){
count+=1;
if(j==chars.length-1){
map.put(nowChar,count);
i=chars.length;
}
}else{
i=i+count;
map.put(nowChar,count);
break;
}
}
resultMap.put(index,map);
}
StringBuffer stringBuffer=new StringBuffer();
resultMap.forEach((k,v)->{
v.forEach((key,value)->{
if(value!=0){
stringBuffer.append(value);
stringBuffer.append(key);
}else{
stringBuffer.append(key);
}
});
});
return stringBuffer.toString();
}
}
字符串压缩
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 文/一路繁华似锦 看过这部电影之后,总想写点什么,但是又不知道从何写起,我没有去看影评或者其他类似这样的文章,因为...