Introduction

String compression (Run-Length Encoding) is a fundamental data compression technique used in various applications.


Method 1: Basic RLE Compression

public class StringCompression {
    
    public static String compressString(String str) {
        if (str == null || str.isEmpty()) {
            return str;
        }
        
        StringBuilder compressed = new StringBuilder();
        int count = 1;
        
        for (int i = 0; i < str.length(); i++) {
            if (i + 1 < str.length() && str.charAt(i) == str.charAt(i + 1)) {
                count++;
            } else {
                compressed.append(str.charAt(i));
                compressed.append(count);
                count = 1;
            }
        }
        
        return compressed.length() < str.length() ? compressed.toString() : str;
    }
    
    public static void main(String[] args) {
        System.out.println(compressString("aabbcccc"));    // a2b2c4
        System.out.println(compressString("abcdef"));      // abcdef
    }
}

Output:

a2b2c4
abcdef

Method 2: Decompression

public class StringDecompression {
    
    public static String decompressString(String compressed) {
        StringBuilder decompressed = new StringBuilder();
        int i = 0;
        
        while (i < compressed.length()) {
            char ch = compressed.charAt(i);
            i++;
            
            StringBuilder count = new StringBuilder();
            while (i < compressed.length() && Character.isDigit(compressed.charAt(i))) {
                count.append(compressed.charAt(i));
                i++;
            }
            
            int num = Integer.parseInt(count.toString());
            for (int j = 0; j < num; j++) {
                decompressed.append(ch);
            }
        }
        
        return decompressed.toString();
    }
    
    public static void main(String[] args) {
        System.out.println(decompressString("a2b2c4"));  // aabbcccc
    }
}

Output:

Advertisement
aabbcccc

Frequently Asked Questions

Q1. When is compression beneficial?

Answer: When repeated characters are frequent.

Q2. Multi-character compression?

Answer: Use different algorithm (Huffman, LZ77).

Q3. Performance?

Answer: O(n) compression and decompression.

Q4. Compression ratio?

Answer: Best when many consecutive duplicates.

Q5. Edge cases?

Answer: Handle single characters, numbers.

Q6. Larger counts?

Answer: Works fine, just longer digit string.

Q7. Space compression?

Answer: Include spaces in compression.

Q8. Case sensitivity?

Answer: Treat upper/lowercase as different.

Q9. Special characters?

Answer: Work same as letters.

Q10. Real-world use?

Answer: Image compression, file storage.