对字符串进行压缩

题目说明:

    利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
给定一个string iniString为待压缩的串(长度小于等于3000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。

/**

* 基本字符串压缩

*/

public static void zipString(String iniString) {

if(iniString == null || iniString.length()==0) {

return;

}

String zipStr = "";

char[] array = iniString.toCharArray();// 11

// System.out.println(array.length);

int count = 1;

int k = 0;

for (int j = k; j < array.length - 1; j++) {

k++;

if (array[j] == array[j + 1]) {

count++;

} else if (j != 0 && (array[j - 1] == array[j])) {

zipStr = zipStr + array[k - 1] + count;

count = 1;

}

if (j != 0 &&(array[j-1] != array[j])

&& (array[j] != array[j + 1])

) {

count = 1;

zipStr = zipStr + array[k-1] + count;

continue;

}

if (j == array.length - 2) {

zipStr = zipStr + array[k] + count;

}

}

// System.out.println(zipStr);

if (zipStr.length() >= iniString.length()) {

System.out.println(iniString);

} else {

System.out.println(zipStr);

}

}

/**

网友的高效解法

*/

public static String zipStr(String iniString){

if(iniString == null || iniString.length()==0) {

return null;

}

StringBuilder sb = new StringBuilder();

int len = iniString.length();

for(int i=0;i<len;i++) {

int count = 1;

while((i+1)<len && iniString.charAt(i) == iniString.charAt(i+1)){

count++;

i++;

}

if(count>=1){

sb.append(iniString.charAt(i));

sb.append(count);

}else{

sb.append(iniString.charAt(i));

}

}

if(sb.length() < iniString.length()){

return sb.toString();

}

return iniString;

}

时间: 2024-11-08 22:12:24

对字符串进行压缩的相关文章

字符串的压缩与解压

public static string compress(string aString) { if (string.IsNullOrEmpty(aString)) return ""; StringBuilder sb = new StringBuilder(); byte[] byteArray = CompressByte(aString); foreach (byte item in byteArray) sb.Append((char)item); return sb.ToS

字符串的压缩和解压缩

http://www.blogjava.net/fastunit/archive/2008/04/25/195932.html 字符串的压缩和解压缩 数据传输时,有时需要将数据压缩和解压缩,本例使用GZIPOutputStream/GZIPInputStream实现. 1.使用ISO-8859-1作为中介编码,可以保证准确还原数据2.字符编码确定时,可以在uncompress方法最后一句中显式指定编码 import java.io.ByteArrayInputStream;import java

利用SharpZipLib进行字符串的压缩和解压缩

http://www.izhangheng.com/sharpziplib-string-compression-decompression/ 今天搞了一晚上压缩和解压缩问题,java压缩的字符串,用C#始终没解开,后来考虑到实际的应用,还是数据库存储压力,不适合存储压缩后的长字符串,决定去掉压缩,用明文,在其他地方处理保密问题. 不过,今天找了一个很好用的压缩/解压缩方法,首先需要去http://www.icsharpcode.net/下载SharpZipLib,然后引用ICSharpCode

字符串逆转-压缩连续空格

一.算法描述 给定一个字符串,对于字符串包括多个连续空格的情况,压缩并只保留一个空格,同时以空格隔离的子串逆转. 二.算法思路 其本质是字符串逆转的变体,即在字符串逆转的基础上,还要压缩多余空格,这种情况相比单纯的字符串逆转多了一步判断连续空格的条件 如下代码中,包括单纯的字符串逆转函数,实现比较简单,主要是注意下标的位置 三.算法代码 #include <iostream> #include <string.h> #include <stdio.h> #include

.net字符串Gzip压缩和base64string转换:

class Program { static void Main(string[] args) { //要压缩的字符串 string data = "13800138000,验证码:1234[华信]\r\n13800138000,验证码:4567[华信]"; byte[] buffer = System.Text.UTF8Encoding.UTF8.GetBytes(data); //压缩后的byte数组 byte[] compressedbuffer = null; //Compre

JAVA对字符串的压缩与解压缩

import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.zip.GZIPInputStream;import java.util.zip.GZIPOutputStream;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import ja

大规模字符串检索-压缩trie树

本文使用压缩trie树实现字符串检索的功能.首先将字符串通过编码转化为二进制串,随后将二进制串插入到trie树中,在插入过程中同时实现压缩的功能. 字符编码采用Huffman,但最终测试发现不采用Huffman的方法不仅省下了编码时间,同时trie树的插入时间也有所减少. 1 /** 2 程序主函数与编码 3 */ 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <string.h> 7 #include &q

字符串折叠&amp;压缩(区间DP)

字符串折叠 题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS…S(X个S). 如果A = A’, B = B’,则AB = A’B’ 例如,因为3(A) = AAA, 2(B) = BB,所以3(A)C2(B) = AAACBB,而2(3(A)C)2(B) = AAACAAACBB 给一个字符串,求它的最短折叠.例如AAAAAAAAAABABABCCD的最短折叠为:9(A)3(AB)CCD. 输

对输入字符串进行压缩,输入&quot;aaabcccdde&quot;,输出&quot;3ab3c2de&quot;,即对连续出现的字符进行压缩

public class Compress { public static void main(String[] args){ String s = "aaabcccdde"; char[] a = s.toCharArray(); //将String转化为char[] compress(a); } static void compress(char[] a) { int i = 1, j = 0; int count = 1; while(i < a.length){ whil