Skip to content

refactor: StringCompression #5410

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 7 additions & 10 deletions src/main/java/com/thealgorithms/strings/StringCompression.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.thealgorithms.strings;
/* References : https://en.wikipedia.org/wiki/Run-length_encoding
* String compression algorithm deals with encoding the string, that is, shortening the size of the
* string

/**
* References : https://en.wikipedia.org/wiki/Run-length_encoding
* String compression algorithm deals with encoding the string, that is, shortening the size of the string
* @author Swarga-codes (https://github.com/Swarga-codes)
*/
public final class StringCompression {
Expand All @@ -14,19 +15,16 @@ private StringCompression() {
* @return the compressed character array as string
*/
public static String compress(String input) {
// Keeping the count as 1 since every element present will have atleast a count
// of 1
// Keeping the count as 1 since every element present will have at least a count of 1
int count = 1;
String compressedString = "";
// Base condition to check whether the array is of size 1, if it is then we
// return the array
// Base condition to check whether the array is of size 1, if it is then we return the array
if (input.length() == 1) {
return "" + input.charAt(0);
}
// If the array has a length greater than 1 we move into this loop
for (int i = 0; i < input.length() - 1; i++) {
// here we check for similarity of the adjacent elements and change the count
// accordingly
// here we check for similarity of the adjacent elements and change the count accordingly
if (input.charAt(i) == input.charAt(i + 1)) {
count = count + 1;
}
Expand Down Expand Up @@ -54,7 +52,6 @@ public static String compress(String input) {
public static String appendCount(String res, int count, char ch) {
if (count > 1) {
res += ch + "" + count;
count = 1;
} else {
res += ch + "";
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.thealgorithms.strings;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

public class StringCompressionTest {
@ParameterizedTest
@CsvSource({"a,a", "aabbb,a2b3", "abbbc,ab3c", "aabccd,a2bc2d"})
@CsvSource({"'a', 'a'", "'aabbb', 'a2b3'", "'abbbc', 'ab3c'", "'aabccd', 'a2bc2d'", "'aaaabbbcccc', 'a4b3c4'", "'abcd', 'abcd'", "'aabbccdd', 'a2b2c2d2'", "'aaabbaa', 'a3b2a2'", "'', ''", "'a', 'a'", "'aaaaa', 'a5'", "'aabb', 'a2b2'", "'aabbbaaa', 'a2b3a3'", "'qwerty', 'qwerty'"})
void stringCompressionTest(String input, String expectedOutput) {
String output = StringCompression.compress(input);
assertEquals(expectedOutput, output);
Expand Down