字符串压缩(小知识点)

    科技2025-09-16  41

    当对字符串进行修改的时候 需要使用 StringBuffer 和 StringBuilder 类。 和 String 类不同的是,StringBuffer 和 StringBuilder 类 的对象能够被多次的修改,并且不产生新的未使用对象。 StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全 的(不能同步访问)。 由于 StringBuilder 相较于 StringBuffer 有速度优势, 所以多数情况下建议使用 StringBuilder 类。 ***然而在应用程序要求线程安全的情况下, 则必须使用 StringBuffer 类。*** Java中的append( )方法 其实是创建了一个新的数组,扩大了长度,将需要添加的字符串给zhi复制到这个新的数组中。 JAVA中Stringbuffer有append( )方法: 而Stringbuffer是动态字符串数组,append( )是往动态字符串数组添加,跟“xxxx”+“yyyy”相当‘+’号。 跟String不同的是Stringbuffer是放一起的,String1+String2 和Stringbuffer1.append("yyyy")虽然打印效果一样, 但在内存中表示却不一样 String1+String2 存在于不同的两个地址内存, Stringbuffer1.append(Stringbuffer2)放再一起。 StringBuffer是线程安全的,多用于多线程。 /*题目概述: 字符串压缩。利用字符重复出现的次数,编写一种方法, 实现基本的字符串压缩功能。比如,字符串aabcccccaaa 会变为a2b1c5a3。若“压缩”后的字符串没有变短, 则返回原先的字符串。你可以假设字符串中只包含大小写 英文字母(a至z) 解题思路: 双指针解法*/ class Solution { public String compressString(String S) { int N=S.length(); int i=0; StringBuilder sb = new StringBuilder(); while(i<N) { int j=i; while(j<N && S.charAt(j)==S.charAt(i)) { j++; } sb.append(S.charAt(i)); sb.append(j-i); i=j; } String res = sb.toString(); if(res.length()<S.length()) { return res; } else { return S; } } }
    Processed: 0.027, SQL: 8