1、用java语言编写,字符串压缩,输入字符串从a-z或A-Z,若出现两次相同的字符就用字符串加数字表示。
如:AABBCCDD,输出为:A2B2C2D2,实现压缩。
如:AABBCCDD,输出为:A2B2C2D2,实现压缩。
解决方案 »
- JTabbedPane新建标签页
- 创建不规则的数组
- 抽象类
- 关于spring和hibernate整合后spring管理事务问题,分不够就加,在线等!!
- +++一个java方法,包括了300个参数,编译时出错“too many parameter”,怎么办??
- 还是synchronized问题。。
- jbuilder8 enterprise注册码or注册机!!!!谁有啊??有的话帮个忙!谢谢!!
- 如何生成一个图片文件(比如.gif,.jpg)?
- 局域网聊天问题
- 为什么我的中括号在后面?
- 几个JScrollPane拼接在一起时怎么去掉边界 就好比下面图示的几个怎么让他们看起看来像一个JScrollPane
- 测试ansj出现内存溢出
//只针对a-z,A-Z
static String compressString(String str) {
char[] arr = str.toCharArray();
TreeMap<Character, Integer> map = new TreeMap<Character, Integer>();
for (char c : arr) {
if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
if(map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
} else {
System.err.println("input error");
return null;
}
}
StringBuffer sb = new StringBuffer();
for (Entry<Character, Integer> entry : map.entrySet()) {
sb.append(entry.getKey());
if(entry.getValue() > 1) {
sb.append(entry.getValue());
}
}
return sb.toString();
}
String s = "ABBBBBBCCDD";
StringBuffer sb = new StringBuffer();
int i = 0, size = s.length();
int loop = 1;
while (i < size) {
char c = s.charAt(i);
sb.append(c);
i++;
while (i < size && s.charAt(i) == c) {
i++;
loop++;
}
if(loop!=1){
sb.append(String.valueOf(loop));
loop = 1;
}
}
System.out.println(sb);
}