Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write your code in the file Compress.java. Your code should go into a method wit

ID: 3759653 • Letter: W

Question

Write your code in the file Compress.java. Your code should go into a method with the following signature. You may write your own main method to test your code. The graders will ignore your main method: You may NOT use any modules or classes from outside java.lang (do not add any "import" statements to your programs).

public static String compress (String original){}

Run-length encoding (RLE) is a simple "compression algorithm" (an algorithm which takes a block of data and reduces its size, producing a block that contains the same information in less space). It works by replacing repetitive sequences of identical data items with short "tokens" that represent entire sequences. Applying RLE to a string involves finding sequences in the string where the same character repeats. Each such sequence should be replaced by a "token" consisting of:

the number of characters in the sequence

the repeating character

If a character does not repeat, it should be left alone.

For example, consider the following string:

After applying the RLE algorithm, this string is converted into:

In the compressed string, "9w" represents a sequence of 9 consecutive lowercase "w" characters. "5e" represents 5 consecutive lowercase "e" characters, etc.

Write a method called compress that takes a string as input, compresses it using RLE, and returns the compressed string. Case matters - uppercase and lowercase characters should be considered distinct. You may assume that there are no digit characters in the input string. There are no other restrictions on the input - it may contain spaces or punctuation. There is no need to treat non-letter characters any differently from letters.

Explanation / Answer

public class Compress {

   public static String compress(String original) {

       StringBuilder str = new StringBuilder();

      

      

       for (int i = 0; i < original.length(); i++) {

           int count=0;

           char ch = original.charAt(i);

           for (int j = i; j < original.length(); j++) {

               if (ch == original.charAt(j)) {

                   count++;

               } else {

                   break;

               }

           }

           if (count > 1) {

               str.append(count);

           }

           str.append(original.charAt(i));

           if (count > 1) {

               i+=count;

           }

       }

      

       return str.toString();

   }

  

   public static void main(String[] args) {

       System.out.println(compress("qwwwwwwwwweeeeerrtyyyyyqqqqwEErTTT"));

   }

}