Search code examples
javastringrepeat

How to remove repeating code in this solution?


I have this code which compresses characters in the given string and replaces repeated adjacent characters with their count.

Consider the following example:

Input:

aaabbccdsa

Expecting output:

a3b2c2dsa

My code is working properly but I think repeating if condition can be removed.

public class Solution {
    public static String getCompressedString(String str) {
        String result = "";
        char anch = str.charAt(0);
        int count = 0;

        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);

            if (ch == anch) {
                count++;
            } else {
                if (count == 1) {           // from here
                    result += anch;
                } else {
                    result += anch + Integer.toString(count);                    
                }                         // to here

                anch = ch;
                count = 1;
            }

            if (i == str.length() - 1) {
                if (count == 1) {           // from here
                    result += anch;
                } else {
                    result += anch + Integer.toString(count);                    
                }                         // to here
            }
        }

        return result;
    }
}

In this solution code below is repeated two times

if (count == 1) {
    result += anch;
} else {
    result += anch + Integer.toString(count);                    
}

Please, note, I don't want to use a separate method for repeating logic.


Solution

  • You can do something like this:

    public static String getCompressedString(String str) {
            String result = "";
            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 {
                    if (count == 1) {
                        result += str.charAt(i);
                    } else {
                        result += str.charAt(i) + "" + count;
                        count = 1;
                    }
                }
            }
            return result;
        }
    

    I got rid of the repeated code, and it do as intended.