首页 热点资讯 义务教育 高等教育 出国留学 考研考公

用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();
}
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com