首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不使用map的情况下在java上压缩字符串

在Java上压缩字符串的一个常用方法是使用字符串压缩算法,例如Run-Length Encoding(RLE)算法。RLE算法是一种简单的无损数据压缩算法,它通过记录连续重复的字符来减少字符串的长度。

在不使用map的情况下,可以使用以下方法来实现字符串压缩:

  1. 创建一个空字符串 compressedString 用于存储压缩后的结果。
  2. 遍历输入字符串,利用指针来跟踪当前字符和其后续重复的字符数量。
  3. 使用count变量记录当前字符的重复数量,初始化为1。
  4. 如果当前字符与下一个字符相同,则将count增加1,并继续移动指针到下一个字符。
  5. 如果当前字符与下一个字符不相同,将当前字符和count追加到 compressedString 中,并将count重置为1。
  6. 重复步骤4和步骤5直到遍历完整个输入字符串。
  7. 返回compressedString作为压缩后的字符串结果。

以下是一个示例的Java代码实现:

代码语言:txt
复制
public class StringCompression {
    public static String compressString(String input) {
        if (input == null || input.isEmpty()) {
            return input;
        }

        StringBuilder compressedString = new StringBuilder();
        int count = 1;
        int length = input.length();

        for (int i = 0; i < length; i++) {
            if (i < length - 1 && input.charAt(i) == input.charAt(i + 1)) {
                count++;
            } else {
                compressedString.append(input.charAt(i)).append(count);
                count = 1;
            }
        }

        return compressedString.length() < length ? compressedString.toString() : input;
    }

    public static void main(String[] args) {
        String input = "aabbbccccdd";
        String compressedString = compressString(input);
        System.out.println(compressedString);  // Output: "a2b3c4d2"
    }
}

此示例使用RLE算法来压缩字符串,并返回压缩后的结果。在该算法中,没有使用map数据结构。

压缩后的字符串示例:对于输入字符串 "aabbbccccdd",压缩后的结果为 "a2b3c4d2"。

注意:本示例代码仅演示了如何在Java上压缩字符串,实际使用中可能需要考虑更多边界条件和错误处理机制。另外,为了提高压缩效率,还可以考虑使用其他更复杂的压缩算法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flink DataSet编程指南-demo演示及注意事项

如果启用了引用字符串解析,并且该字段第一个字符不是引用字符串,那么该字符串将被解析为无引号字符串。默认情况下,禁用引用字符串解析。...然而,它具有一定处理开销,并可能导致更高Java垃圾收集活动。下表说明了用户功能如何在对象重用禁用模式下访问输入和输出对象。...比如,字符串“f0-f2”表示JAVA输入tuple第一个元素,无变化copy到输出JAVA tuple第三个字段。...多个转发字段可以通过将它们以分号分隔为“f0; f2-> f1; f3-> f2”或单独字符串“f0”,“f2-> f1”,“f3-> f2” 转发字段信息可以通过在函数类定义附加Java注释,...读取字段信息使用以下注释指定为函数类注释: A), @NonForwardedFields 用于单输入函数,Map和Reduce。

10.8K120

风控规则引擎(一):Java 动态脚本

json 格式定义出来,下面就是如何在运行中动态解析这个 json 格式并执行。...,直接将其根据不同情况生成对应 java 代码,并动态编译成 Java Class,方便下一次执行,该方案依然需要处理各种情况,但因为在第一次编译成了 java 代码,性能和直接编写 java 代码一样...使用第三方库实现表达式执行 使用第三方库实现动态表达式执行 在 Java 中有很多表达式引擎,常见有 jexl3 mvel spring-expression QLExpress groovy...jexl3 更适合让运营手动编写情况,能容忍一些错误情况;aviator 适合开发来使用使用确定类型参数来提供性能 jexl3 使用 加入依赖 org.apache.commons...下一篇主要讲一下在引擎里面规则参数、操作符是如何设计,也讲一下可视化圆形设计

76910
  • 年后面试必备:95%错误率9道面试题!

    大多数棘手Java问题来自于令人困惑概念,函数重载和覆盖,多线程,掌握非常棘手,字符编码,检查与未检查异常和Integer溢出等微妙Java编程细节。...HashMap如何在Java中运行。HashMap也是一个在Java中创建令人困惑和棘手问题热门话题。...每个存储桶都包含一个Map.Entry对象链接列表,其中包含Key和Value。...要正确回答这个问题,您需要了解Unicode字符在Java字符串值和Java字符串表示方式,以及字符编码在String.getBytes()中作用。...因此,如果在编码和解码期间不使用相同字符编码,则检索到值可能不正确。当我们调用 str.getBytes() 而指定字符编码方案时,JVM使用平台默认字符编码来完成工作。

    95520

    FreeMarker与JSP 2.0 + JSTL组合进行比较

    在这种情况下,不挑剔是大部分地毯(面对问题),当然大多数人觉得更方便,但是我们相信在大多数情况下,严格会节省您时间并提高您软件质量长跑。...因此,一般来说,建议保留它们,如果数字是“计算机受众”(在分组分隔符混淆)情况下,请使用c内置。例如: <a href="/shop/productdetails?...FreeMarker模板语言(FTL)<em>的</em>“哈希”类型与<em>Java</em>不同<em>Map</em>。FTL<em>的</em>散列也是一个关联数组,但是它也<em>使用</em><em>字符串</em>键。...(如果由于某种原因您无法升级到2.3.25,则可以<em>使用</em>相应<em>的</em><em>Java</em> API <em>Map</em>,<em>如</em> <#list myMap?...<em>java</em>.util.<em>Map</em><em>的</em>帮助 来访问<em>Java</em> API 。

    5.4K40

    Java内存泄漏解决之道

    在本教程中,我们将了解内存泄漏潜在原因是什么,如何在运行时识别它们,以及如何在我们应用程序中处理它们。...如果处理,应用程序最终将耗尽其资源,最终以致命java.lang.OutOfMemoryError终止。 堆内存中有两种不同类型对象 - 引用和未引用。...我们应该总是避免使用finalize方法 6. 内部字符串 Java 7重大变化:Java String池在从PermGen转移到HeapSpace了。...但是对于在版本6及更低版本运行应用程序,在使用大型字符串时我们应该更加专心。...启用分析 Java分析器Java VisualVM是通过应用程序监视和诊断内存泄漏工具。他们分析我们应用程序内部发生了什么 - 例如,如何分配内存。

    1.5K21

    【数据结构】认识赫夫曼树与赫夫曼编码 上手实现压缩文件和解压

    0 向右路径为 1 , 编码 如下: 按照上面的赫夫曼编码,我们"i like like like java do you like a java" 字符串对应编码为 (注意这里我们使用无损压缩...24, -14, -117, -4, -60, -90, 28] 现在要求使用赫夫曼编码, 进行解码,又重新得到原来字符串"i like like like java do you like a java...先得到huffmancodebytes 对应 二进制字符串 1010100010111 StringBuilder stringBuilder = new StringBuilder...我们学习了通过赫夫曼编码对一个字符串进行编码和解码, 下面我们来完成对文件压缩和解压, 具体要求: 给你一个图片文件,要求对其进行无损压缩, 看看压缩效果如何。...先得到huffmancodebytes 对应 二进制字符串 1010100010111 StringBuilder stringBuilder = new StringBuilder

    46530

    【腾讯云1001种玩法】Ubuntu 14.04 Spark单机环境搭建与初步学习

    这一小节主要是记录下在Ubuntu 14.04下搭建Spark单机环境过程。...官网上下载,而官网下载之前需要确认协议,如果直接复制官网下载地址则会出现下载是个网页情况。...$ javac -version javac 1.8.0_60 安装Scala Scala安装过程和Java类似,比较简单 官网下载压缩包,然后解压 # mkdir /opt/scala #...前面说了,Spark 主要使用 Scala 来进行开发,这意味着要最大程度地发挥 Spark 性能,还需要再多学一门编程语言(Spark 还支持 Java 和 Python 接口,但 Java 语法没有...另外,相信不少读者立刻就能看出这是 Java 风格导入语句。事实,Scala 正是基于 Java 而开发,因此其语法也大多脱胎于 Java。 第6行是读取数据,并将结果赋值给一个变量 raw。

    4.2K10

    Gradle初探

    -q 控制gradle输出日志级别。 Groovy将println()添加java.lang.Object,方法调用可以省略括号,以空格分开,单引号双引号包含内容都是字符串。...leftShitf()方法 list.each { result << it * 2 } println result //在集合中每个元素执行操作并返回一个结果集合使用...<< 操作符映射到leftShitf()方法 list.each { result << it * 2 } println result //在集合中每个元素执行操作并返回一个结果集合使用...def emptyMap = [:] println emptyMap //定义多个keymap ,默认情况下 没有引号,''或者""key...return可以写,Groovy会把方法执行过程中最后一句代码执行结果作为其返回值。代码块可以作为参数传递。 Java Bean 组件化、插件化、配置集成等都是基于JavaBean。

    67020

    避开NullPointerException10条建议

    举个例子,我需要在原有逻辑加一段代码,而新加代码报错抛出了 NPE,同时又没做异常处理,就直接导致后面的逻辑运行了,影响了整个原有逻辑,太恐怖了。所以大家一定要小心避开 NPE 这个坑。...本文将会从以下两个方面说起: 发生 NPE 可能情况 避开 NPE 建议 2. 发生 NPE 可能情况 首先我们需要清楚 NPE 是怎么发生。...避开 NPE 建议 这节将介绍如何在开发过程中避开 NPE 一些建议。...而使用 Optional 再结合 Java8 特性 Lambda 表达式、流处理,可以采用链式操作,更为简洁。...参考 Java Tips and Best practices to avoid NullPointerException in Java Applications 如何在 Java8 中风骚走位避开空指针异常

    2.1K30

    何在Debian 9以独立模式安装Hadoop

    介绍 Hadoop是一个基于Java编程框架,支持在廉价机器集群处理和存储极大数据集。它是大数据竞争领域第一个主要开源项目,由Apache Software Foundation赞助。...通过如何在Debian 9使用Apt安装Java来安装Java。您可以在本教程中使用OpenJDK。...在/etc/environment中设置JAVA_HOME环境变量,何在Debian 9使用Apt安装Java,Hadoop需要设置此变量。...注意: Apache网站将动态引导您访问最佳镜像,因此您URL可能与上面的URL匹配。...既然您已经验证文件没有损坏或更改,请使用带有-x标志tar命令来解压缩,带有-z标志用于解压缩,有-v来输出详细信息,有-f指定您从文件中提取存档。

    1.3K10

    java中线程安全容器_jfinal容器线程安全吗

    1.MapMap类中,提供两种线程安全容器。 java.util.Hashtable Hashtable和HashMap类似,都是散列表,存储键值对映射。...运用锁分离技术,即在代码块加锁,而不是方法加。同时ConcurrentHashMap一个特色是允许多个修改并发操作。这就有意思了,我们知道一般写都是互斥,为什么这个还能多个同时写呢?...那是因为ConcurrentHashMap采用了内部使用段机制,将ConcurrentHashMap分成了很多小段。只要不在一个小段写就可以并发写。 2....也例外。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    70420

    JAVA知识盲区整理

    JAVA知识盲区整理 静态内部类调用时机 静态内部类 Java中volatile关键字及其作用 一篇反射好文链接 获取指定包下注解--reflections工具类 Spring如何在value注解中传入变量作为参数...() 反射中强转类型转换方法--cast Java File类常用方法及文件名过滤器(FilenameFilter) 使用ZipEntry压缩与解压缩 java无需解压zip压缩包直接读取包内文件名...类 reflections工具类 使用建议看此篇文章 Reflections 反射api使用总结 ---- Spring如何在value注解中传入变量作为参数—使用SPEL表达式 SpEL表达式总结...使用 ---- java字符串常量池 字符串常量池,程序当中直接写上双引号字符串,就在字符串常量池中 对于基本类型来说 == 是进行数值得比较 对于引用类型来说 == 是进行【地址值】比较...使用ZipEntry压缩与解压缩 ---- java无需解压zip压缩包直接读取包内文件名(含中文) java无需解压zip压缩包直接读取包内文件名(含中文) //在不解压压缩文件情况

    1.1K32

    hive优化总结

    (参数2,总输入数据量/参数1)   即,如果reduce输入(map输出)总大小超过1G,那么只会有一个reduce任务; :select pt,count(1) from popt_tbaccountcopy_mes...这个优化适合无效id(比如-99,‘’,null等)产生倾斜问题。把空值key变成一个字符串加上随机数,就能把倾斜数据分到不同Reduce,从而解决数据倾斜问题。...因为空值参与关联,即使分到不同Reduce,也不会影响最终结果。...将这些表格转换为ORCFile格式通常会显着减少查询时间;   ORC支持压缩存储(使用ZLIB或如上所示使用SNAPPY),但也支持未压缩存储。...3.7.2 常用压缩方法对比   各个压缩方式所对应Class类: 3.7.3 压缩方式选择   压缩比率,压缩压缩速度,是否支持Split 3.7.4 压缩使用   Job输出文件按照block

    1.7K41

    赫夫曼树与赫夫曼编码

    flag 标志是否需要补高位如果是true ,表示需要补高位,如果是false表示补, 如果是最后一个字节,无需补高位 * @return 是该b 对应二进制字符串,(注意是按补码返回)...赫夫曼编码压缩文件注意事项 如果文件本身就是经过压缩处理,那么使用赫夫曼编码再压缩效率不会有明显变化, 比如视频,ppt 等等文件 赫夫曼编码是按字节来处理,因此可以处理所有的文件(二进制文件、文本文件...,可以参考我讲Java基础 二进制原码,反码,补码 * @param b 传入 byte * @param flag 标志是否需要补高位如果是true ,表示需要补高位,如果是false表示补...} //使用一个方法,将前面的方法封装起来,便于我们调用. /** * * @param bytes 原始字符串对应字节数组 * @return 是经过 赫夫曼编码处理后字节数组...,返回一个赫夫曼编码 压缩byte[] /** * * @param bytes 这时原始字符串对应 byte[] * @param huffmanCodes 生成赫夫曼编码map

    1.1K30

    java json字符串转对象 效率_json串转自动创建java对象

    ; import java.util.Date; import java.util.List; import java.util.Map; /** * 封装json工具类 * 通过该类减少项目中对特定...user.setAccount("admin"); user.setCreateTime(new Date()); String json = toJson(user); System.out.println("压缩...json字符串:========》"); System.out.println(json); System.out.println("方便调试查看json字符串:===》"); System.out.println...(toJsonForHuman(user)); System.out.println("不输出值为nulljson字符串:==》"); System.out.println(toJsonNotNull...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.4K20

    Java 9对Http2改进

    HTTP/2 关注于数据是如何在服务器和客户端之间形成帧并被传输....HTTP/2优点 在 HTTP/1.1中, 同一时刻我们最多能打开6个连接, 所以每个请求必须等待其它请求完成.为了避免这个问题,开发者通常需要使用一些变通方法. 缩小和压缩文件或图片等。...这个问题在HTTP/2.0中也被解决了,它通过将请求头打包成一个压缩块作为一个整体单元来发送,一旦发送完毕,头部块将被解码,HTTP/2使用HPack做请求头压缩....但随着时间发展,HTTP使用已经进化了,但遗憾地是,Java API却没有相应地跟上. 所以,在 Java 9里,一个全新更清晰更干净API被添加以用来支持HTTP/2....在没有第三方依赖库情况下,它使得应用程序更快更具有响应性. import jdk.incubator.http.*; import java.net.URI; import java.io.IOException

    1.5K70

    坚持还是放弃,Go语言“美好与丑陋”解读

    然而相比 Java,在原始性能基准测试中,情况并不是那么清晰。在内存使用和垃圾收集方面 Go 力压 Java。...因此虽然 channel 明显让并发编程更简单,但他们阻止在共享数据里竞争条件。而且 slice 和 map 本质可变性让这种情况更容易发生。...它在语言设计中看起来像是一个很大缺陷,使其实现更容易。 结构字段标签:运行时字符串 DSL 如果您在 Go 中使用过 JSON,您肯定遇到过类似的情况: ?...这些语言规范所说结构标签是一个字符串“通过反射接口可见并参与结构类型标识,但是被忽略”。 所以基本,写上任何你想要字符串,并在运行时使用反射来解析它。 如果语法不对,会在运行时会出现宕机。...为什么 Go 决定使用原始字符串,并且任何库都可以决定是否使用它想要任何 DSL,在运行时解析? 当您使用多个库时,情况可能会变得尴尬:下面是从协议缓冲区 Go 文档中取出一个例子: ?

    1.6K41

    【Dart语言解密】想要深入了解Dart语法和类型变量吗?

    Dart内置基本类型, num、bool、String、List和Map,在不引入其他库时可以使用它们声明变量。...在正常情况下,它们精度与取值范围就足够满足我们诉求了。...和JavaScript一样,构造字符串字面量时既能使用单引号也能使用双引号,还能在字符串中嵌入变量或表达式:你可以使用 ${express} 把一个表达式值放进字符串。...以上述代码为例,如果往arr2集合中添加一个浮点数 arr2.add(1.1),尽管语义合法,但编译器会提示类型匹配,从而导致编译失败。...如要在遍历集合时判断元素类型,使用Dart中类型检查运算符is。: // 使用is运算符判断了每个元素类型,并打印了相应信息。

    22520
    领券