From e3ad3761fd7c0d6d82242e65fc4e398a9992105b Mon Sep 17 00:00:00 2001 From: Alex Klymenko Date: Tue, 27 Aug 2024 12:02:50 +0200 Subject: [PATCH] refactor: `StringCompression` (#5410) refactor: StringCompression Co-authored-by: alxkm --- .../strings/StringCompression.java | 17 +++++++---------- .../strings/StringCompressionTest.java | 3 ++- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/thealgorithms/strings/StringCompression.java b/src/main/java/com/thealgorithms/strings/StringCompression.java index ddbee4c4..85bc0e4d 100644 --- a/src/main/java/com/thealgorithms/strings/StringCompression.java +++ b/src/main/java/com/thealgorithms/strings/StringCompression.java @@ -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 { @@ -14,19 +15,16 @@ public final class 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; } @@ -54,7 +52,6 @@ public final class StringCompression { public static String appendCount(String res, int count, char ch) { if (count > 1) { res += ch + "" + count; - count = 1; } else { res += ch + ""; } diff --git a/src/test/java/com/thealgorithms/strings/StringCompressionTest.java b/src/test/java/com/thealgorithms/strings/StringCompressionTest.java index bbd56c19..fdec311f 100644 --- a/src/test/java/com/thealgorithms/strings/StringCompressionTest.java +++ b/src/test/java/com/thealgorithms/strings/StringCompressionTest.java @@ -1,4 +1,5 @@ package com.thealgorithms.strings; + import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.params.ParameterizedTest; @@ -6,7 +7,7 @@ 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);