行程编码RLE java实现
来源:互联网 发布:手机淘宝删除聊天记录 编辑:程序博客网 时间:2024/04/24 13:03
多媒体布置了一到行程编码RLE。。。然后我百度了发现居然没有java的实现方式。然后我就来献丑下。用来造福人类(学弟学妹们).可能代码冗余很大,还有很多地方值得优化的。等空闲来也行我会来优化下。
先来看下结果
默认字符串是不带#的字符串。(如果包含其实也行加个转移符就行,我懒得优化了)4位以上(包括4位就开始压缩)格式是重复的字符+#+重复字符的数量+#import java.util.*;public class Compression { public static void main(String[] argc) { Scanner cin=new Scanner(System.in); String code=cin.next().trim(); lengthCoding(code); huffmancoding(code); } private static void lengthCoding(String src) { String result=runLengthCoding(src); System.out.println("行程编码"); System.out.println("原字符串:"+src); System.out.println("压缩字符:"+result); System.out.println("解压字符:"+runLengthCoding_read(result)); } //行程编码加密 private static String runLengthCoding(String src) { src=src+"#";//最后填一个#用于方便最后一个before可以输出 List<String> result=new ArrayList<String>();//存放结果 List<Character> temp=new ArrayList<Character>();//存放临时变量和数数 char before=src.charAt(0);//前后字符参照对比 for(int i=1;i<src.length();i++) { if(src.charAt(i)==before)//相同都暂时存放在temp里 { temp.add(before); } else { if(temp.size()>=3)//加上before一共4位 { result.add(temp.get(0)+"#"+(temp.size()+1)+"#");//before没有加进去所以大小要加1 } else { if(temp.isEmpty()) { result.add(String.valueOf(before)); } else { StringBuilder temp2=new StringBuilder(); temp2.append(temp.get(0)); for(int j=1;j<temp.size();j++) { temp2.append(temp.get(j)); } temp2.append(before); result.add(temp2.toString()); } } temp=new ArrayList<Character>(); } before=src.charAt(i); } //生成字符串 StringBuilder answer=new StringBuilder(result.get(0)); for(int i=1;i<result.size();i++) { answer.append(result.get(i)); } return answer.toString(); } //行程编码解密 private static String runLengthCoding_read(String src) { char before=src.charAt(0); StringBuilder result=new StringBuilder(); for(int i=1;i<src.length();i++) { if(src.charAt(i)=='#') { StringBuilder temp=new StringBuilder(); i++; while(src.charAt(i)!='#') { temp.append(src.charAt(i)); i++; } int length=Integer.parseInt(temp.toString()); for(int j=0;j<length;j++) { result.append(before); } if(i<src.length()-1)//特殊情况特殊处理。此处应该可以优化掉。但是没空了。。 { before=src.charAt(++i); if(i==src.length()-1) result.append(before); } } else { result.append(before); before=src.charAt(i); if(i==src.length()-1)//特殊情况特殊处理。此处应该可以优化掉。但是没空了。。 result.append(before); } } return result.toString(); }}
接受各位大佬热心指点。
0 0
- 行程编码RLE java实现
- RLE行程长度编码概述
- 二维行程编码(2D RLE)
- RLE行程长度编码压缩算法
- RLE行程长度编码压缩算法
- 行程编码c语言实现
- RLE行程长度压缩算法
- RLE行程长度压缩算法
- RLE行程长度压缩算法
- RLE行程长度压缩算法
- RLE-BMP 利用一维行程编码压缩8位BMP
- RLE 编码
- 行程编码
- RLE 行程长度压缩算法的改进
- RLE行程长度压缩算法C版本
- 报告论文:游程(行程)长度编码matlab(或者C++)实现
- 算法系列之八:RLE行程长度压缩算法
- 算法系列之八:RLE行程长度压缩算法
- 爱油科技基于SpringCloud的微服务实践
- C++第二次上机作业
- 《设计模式》-- 享元模式
- 随机漫步——散点图
- task_1_2_1
- 行程编码RLE java实现
- 算法提高快速幂(快速幂算法详解)
- ZSTU-4273-玩具【RMQ】
- 在php的换行操作中,\n与<br/>的区别
- 用python SSH模块登录,并在远程机执行shell命令
- VirtualBox虚拟机四种网络连接方式小结
- 自定义控件--快速索引(三)
- 我的选择-写于2017年3月22日凌晨
- struts2.3.15.3在myeclipse2017的bug