用java实现,压缩字符串,例如aaaawwwwe输出4a5we
发布网友
发布时间:2022-04-23 04:02
我来回答
共4个回答
热心网友
时间:2023-06-27 00:16
package javase1.day02;
/**
* 1)一种字符串压缩算法
* str ="aaaabbccccddeaaa"
* 压缩为:"4a2b4c2d1e3a"
* 原理实现:
* str = "aaaabbccccddeaaa"
*
* c = str.charAt(i)//c是每个字符
* 1) 初始化
* StringBuilder buf = new StringBuilder();
* int count = 0;代表相同的字符个数
* char ch = str.charAt(0);代表正在统计的相同字符'a'
* 2) 从i=1开始迭代每个字符
* c = str.charAt(i);//c是每个当前字符
* 3) 检查当前字符c与被统计ch是否一致
* 如果一致 count++
* 否则(不一致)
* 向缓冲区buf增加count+ch
* count=0,ch=c;
* 3)没有下个字符就结束
* 4)还有字符串吗?回到2)
*
* 2)实现还原算法
* str = "4a2b4c2d1e3a";
* i
*/
public class Demo5 {
public static void main(String[] args) {
String s = comp("aaaawwwwe");
System.out.println(s);
// System.out.println(decomp(s));
}
public static String comp(String str){
int i = 1;
StringBuilder buf = new StringBuilder();
int count = 1;
char ch = str.charAt(0);
for(;;){
char c = i==str.length() ? '\10':str.charAt(i);
if(c==ch){
count++;
}else{
if(count == 1)
buf.append(ch);
else
buf.append(count).append(ch);
count=1;
ch = c;
}
i++;
if(i==str.length()+1){
break;
}
}
return buf.toString();
}
}
热心网友
时间:2023-06-27 00:17
先建立以个哈希结构,对字符窜进行字符扫描,每遇到一个字符到这个哈希结构里去看看是否存在,如果已经存在了就加1,扫描完毕后,将这个哈希结构按顺序输出就好了
热心网友
时间:2023-06-27 00:17
public String countChar(String str) {
char[] aa = str.toCharArray();
int[] ch = new int[255]; // 以扩展ascII码的长度定义整型数组,用于计数,比如a出现一次时,ch[97]就加1,附ascII码表http://wenku.baidu.com/link?url=QtgixHAgMzyo_Ts_bLburo-qcOX7FAhR8vl96BrPbWA05FAbW-SCCARIZfjIBWxDzi-FmWonFjnoRBKMA8jQ1Wg3FDyG_6NZwbf4SZ4IH4C
for (int i = 0; i < aa.length; i ++) {
char a = aa[i];
ch[a] ++; // char型变量用于整型时,java取其ascII码
}
String result = "";
// 计数完成后遍历ch取计数值
for (int i = 0; i < ch.length; i ++) {
if (ch[i] > 0) {
result += ch[i]; // 取计数值
char c = i; // 取ascII码对应的字符
result += String.valueOf(c);
}
}
return result;
}
热心网友
时间:2023-06-27 00:18
public class Test1 {
public static void main(String[] args) {
String s = "aaaawwwwe";
System.out.println(fn(s));
}
public static String fn(String s) {
StringBuilder rs = new StringBuilder();
String sTmp = "";
int iTmp = 0;
for (int i = 0; i < s.length(); i++)
{
if (0 == i) {
sTmp = s.substring(0, 1);
iTmp = 1;
} else {
if (sTmp.equals(s.substring(i, i + 1))) {
iTmp++;
} else {
rs.append("" + iTmp + sTmp);
sTmp = s.substring(i, i + 1);
iTmp = 1;
}
}
}
if (iTmp != 0) {
rs.append("" + iTmp + sTmp);
}
return rs.toString();
}
}