精华内容
下载资源
问答
  • 给定一组字符,使用原地算法将其压缩压缩后的长度必须始终小于或等于原数组长度。 数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。 在完成原地修改输入数组后,返回数组的新长度。   进阶: ...

    给定一组字符,使用原地算法将其压缩。

    压缩后的长度必须始终小于或等于原数组长度。

    数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。

    在完成原地修改输入数组后,返回数组的新长度。

     

    进阶:
    你能否仅使用O(1) 空间解决问题?

    示例 1:

    输入:
    ["a","a","b","b","c","c","c"]
    
    输出:
    返回6,输入数组的前6个字符应该是:["a","2","b","2","c","3"]
    
    说明:
    "aa"被"a2"替代。"bb"被"b2"替代。"ccc"被"c3"替代。
    

    看到题目的时候,没有原地算法的思路,所有先用了一个StringBuilder里进行记录

        public int compress(char[] chars) {
            StringBuilder sb = new StringBuilder();
            int i = 0;
            while (i < chars.length) {
                int sum = 1;
                for (int j = i + 1; j < chars.length; j++) {
                    if (chars[j] != chars[i]) {
                        break;
                    }
                    sum++;
                }
                sb.append(chars[i]);
                if(sum > 1) {
                    sb.append(sum);
                }
                i += sum;
            }
            String ans = sb.toString();
            for (int j = 0; j < ans.length(); j++) {
                chars[j] = ans.charAt(j);
            }
            return ans.length();
        }

    写过之后,发现既然可以用StringBuilder里记录, 为什么不直接就从chars的开始来记录呢?因为chars遍历后的数据就没有用处了,直接替换chars前面的数据即可。

    public int compress(char[] chars) {
            int index = 0; //用来更新chars
            int i = 0; //用来遍历chars
            while (i < chars.length) {
                int sum = 1;
                for (int j = i + 1; j < chars.length; j++) { //找到有几个相等的字符
                    if (chars[j] != chars[i]) {
                        break;
                    }
                    sum++;
                }
                chars[index++] = chars[i];
                if (sum > 1) {
                    String s = String.valueOf(sum);
                    for (int k = 0; k < s.length(); k++) {
                        chars[index++] = s.charAt(k);
                    }
                }
                i += sum;
            }
            return index;
        }

    其实在解决问题的时候,刚开始不一定能得到最优解,不过在一步一步的过程中,往往会更加靠近,多思考多动手总没错的。

    展开全文
  • 右指针字符与左指针字符不相等时:将元素及其数量更新在数组中。将左指针指向右指针。 遍历到最后一个字符时也要结算,所以right<=len。 代码 class Solution { public int compress(char[] chars) { int len=...

    我菜爆了 什么都没写出来。

    题目

    https://leetcode-cn.com/problems/string-compression/
    在这里插入图片描述

    分析

    利用双指针。
    初始状态:左指针指向0,右指针指向0。
    右指针字符与左指针字符不相等时:将元素及其数量更新在数组中。将左指针指向右指针。
    遍历到最后一个字符时也要结算,所以right<=len。

    代码

    class Solution {
        public int compress(char[] chars) {
            int len=chars.length;
            int left=0;
            int size=0;
            for(int right=0;right<=len;right++){
                if(right==len||chars[right]!=chars[left]){
                    chars[size++]=chars[left];
                    for(char c:String.valueOf(right-left).toCharArray()){
                        if(right-left>1)
                            chars[size++]=c;
                    }
                    left=right;
                }
            }
            return size;
        }
    }
    

    复杂度

    时间O(N)
    空间O(1)

    结果

    在这里插入图片描述

    展开全文
  • android使用GZipUtils方法进行GZip压缩时候报错 java.util.zip.DataFormatException: stream error 在4.4.4手机回报错,其他手机没问题 解决办法: gos.finish();  gos.flush(); 去掉其中一个

    android使用GZipUtils方法进行GZip压缩时候报错

    java.util.zip.DataFormatException: stream error


    在4.4.4手机回报错,其他手机没问题


    解决办法:

    gos.finish();
     gos.flush();

    去掉其中一个



    展开全文
  • 这篇文章主要介绍了java实现压缩字符串java字符串过滤,需要的朋友可以参考下题目一:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符...

    这篇文章主要介绍了java实现压缩字符串和java字符串过滤,需要的朋友可以参考下

    题目一:通过键盘输入一串小写字母(a~z)组成的字符串。

    请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

    比如字符串“abacacde”过滤结果为“abcde”。

    要求实现函数:

    void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);

    【输入】 pInputStr:输入字符串

    lInputLen:输入字符串长度

    【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;

    【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

    示例

    输入:“deefd”输出:“def”

    输入:“afafafaf” 输出:“af”

    输入:“pppppppp” 输出:“p”

    main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出

    当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,

    但是不要改变函数原型。一定要保证编译运行不受影响。

    题二:题目描述:

    通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

    压缩规则:

    1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".

    2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"

    要求实现函数:

    void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);

    【输入】 pInputStr:输入字符串

    lInputLen:输入字符串长度

    【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;

    【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

    示例

    输入:“cccddecc” 输出:“3c2de2c”

    输入:“adef” 输出:“adef”

    输入:“pppppppp” 输出:“8p”

    public class Test {

    static void stringFilter( char InputStr[], long len, char OutputStr[]){

    int[] a= new int[26];

    int num=0;

    int j=0;//OutputStr[]计数

    for(int i=0;i

    num = InputStr[i]-'a';

    if(a[num]==0){//没出现过

    OutputStr[j]=InputStr[i];

    j++;

    a[num]=1;

    }

    }

    }

    static void stringZip( char InputStr[], long len, char OutputStr[]){

    char temp=' ';

    int num=1;

    int point=0;

    for(int i=0;i

    if(InputStr[i]==temp){

    num++;

    }else{

    if(num!=1){

    OutputStr[point++]=(char)(num+'0');

    num=1;

    }

    OutputStr[point++]=temp;

    temp=InputStr[i];

    }

    }

    }

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    char [] test={'a','a','a','c','b','b','b','a','a','c','a','d','d','d','c','d','e'};

    long len=test.length;

    char [] res = new char[(int) len];

    stringFilter(test,len,res);

    int j=res.length;

    for(int i=0;i

    if(res[i]!='\0'){

    System.out.print(res[i]);

    }else

    break;

    }

    char[] res2=new char[(int) (2*len)];

    stringZip(test,len,res2);

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

    if(res2[i]!='\0'){

    System.out.print(res2[i]);

    }else

    break;

    }

    }

    }

    展开全文
  • 主要介绍了java实现压缩字符串java字符串过滤,需要的朋友可以参考下
  • Java使用压缩库为常规压缩提供了Deflater类。它还提供了DeflaterOutputStream,它使用Deflater类通过压缩(压缩)数据流,然后将压缩后的数据写入另一个输出流来过滤数据流。.../*** 压缩字符串,默认梳utf-8...
  • 如何在Java压缩字符串?我使用GZIPOutputStream或ZIPOutputStream压缩字符串(我的2222235278130938882小于20),但压缩结果比原始字符串长。在某个站点上,我发现一些朋友说这是因为我的原始字符串太短,因此可以...
  • Java使用压缩库为常规压缩提供了Deflater类。它还提供了DeflaterOutputStream,它使用Deflater类通过压缩(压缩)数据流,然后将压缩后的数据写入另一个输出流来过滤数据流。.../*** 压缩字符串,默认梳utf-8...
  • /**** 压缩GZip**@paramdata*@return*/public static byte[] gZip(byte[] data) {byte[] b = null;try{ByteArrayOutputStream bos= newByteArrayOutputStream();GZIPOutputStream gzip= newGZIPOutputStream(bos);...
  • /*** 根据byte数组,生成文件** @param bfile* byte数组* @param filePath* 存储路径* @param fileName* 文件名称* @return true:保存成功 false:保存失败*/public static boolean getFile(byte[] bfile, Stri...
  • 给定一组字符,使用原地算法将其压缩压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。进阶:你能否仅使用O(1) ...
  • 压缩算法进行字符串压缩提前小结:Deflater > gzip > zipDeflater压缩,Inflater解压(较好)import org.apache.commons.codec.binary.Base64;import org.apache.commons.io.output.ByteArrayOutputStream;...
  • java压缩字符串

    2012-09-11 23:22:26
    java压缩字符串
  • 字符串压缩算法 java Java使用ZLIB压缩库为常规压缩提供了Deflater类。 它还提供了DeflaterOutputStream,它使用Deflater类通过压缩(压缩)数据流,然后将压缩后的数据写入另一个输出流来过滤数据流。 有等效的...
  • 最近参加了一个面试,有道关于java语言进行字符串压缩的面试题,当时仅仅给面试官一个思路了,并没有写代码实现,趁着今天有时间,分享给大家。[code]package org.test;/*** 面试题目:现有一个字符串,其内容仅仅...
  • Java使用压缩库为常规压缩提供了Deflater类。它还提供了DeflaterOutputStream,它使用Deflater类通过压缩(压缩)数据流,然后将压缩后的数据写入另一个输出流来过滤数据流。.../*** 压缩字符串,默认梳utf-8...
  • Java 压缩字符串

    2020-01-31 11:00:19
    问题描述:给定一个字符串,利用字符重复出现的次数压缩字符串(重复的字符只会连续的出现)。例如:aabcccccaaa压缩后的字符串为:a2b1c5a3。 解题方法:扫描字符串并统计重复字符出现的次数,当遇到新的字符时将上...
  • import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.zip.GZIPInputStream...
  • Java使用压缩库为常规压缩提供了Deflater类。它还提供了DeflaterOutputStream,它使用Deflater类通过压缩(压缩)数据流,然后将压缩后的数据写入另一个输出流来过滤数据流。.../*** 压缩字符串,默认梳utf-8...
  • import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.zip.GZIPInputStream;import java.util.zip.GZIPOutputStream;// 将一个字符...
  • import java.io.IOException;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import De...
  • Java实现压缩字符串

    2020-09-10 16:20:37
    Java实现压缩字符串 压缩后的字符串格式:[连续的次数|连续的重复字符串] -> [m|s] package com.lzp.test; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util....
  • 在做工程过程中,把做工程过程较好的代码片段做个收藏,下边资料是关于Java字符串压缩和解压缩的代码,希望能对大家有较大好处。package com.util;import java.io.ByteArrayInputStream;import java.io....
  • java 压缩字符串如果源字符串长度小于64,压缩后的字符会比源字符串长。例如:str.length()=32compressedStr.length()=36/*** 压缩字符串* @param str 要压缩的字符串* @return 压缩后的字符串*/public static ...
  • importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.util.zip.GZIPInputStream;importjava.util.zip.GZIPOutputStream;importjava....
  • 题目一:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。要求实现函数:void ...
  • public class Test3{/*** 用JAVA实现字符串压缩算法。 将字符串 aaabcdda 编程实现将其转换为 3a1b1c2d1a ;** @param str* 需要转换的字符串* @return string*/public static String stringToReduce(final String ...
  • 题目描述利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。给定一个string iniString为待...
  • importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.util.zip.GZIPInputStream;...//将一个字符串按照zip方式压缩和解压缩publiccla...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,104
精华内容 441
关键字:

压缩字符串java

java 订阅