用java实现,压缩字符串,例如aaaawwwwe输出4a5we

如题... 如题 展开
 我来答
Zx_120945
2014-03-10 · 超过15用户采纳过TA的回答
知道答主
回答量:44
采纳率:100%
帮助的人:33.6万
展开全部
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();

}
}
天天好宝宝
2014-03-10 · TA获得超过373个赞
知道小有建树答主
回答量:603
采纳率:0%
帮助的人:492万
展开全部
先建立以个哈希结构,对字符窜进行字符扫描,每遇到一个字符到这个哈希结构里去看看是否存在,如果已经存在了就加1,扫描完毕后,将这个哈希结构按顺序输出就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pqzhanga
2014-03-10 · TA获得超过636个赞
知道小有建树答主
回答量:488
采纳率:50%
帮助的人:423万
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-10
展开全部
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();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式