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:
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.