package com.interview.string; public class RunLengthEncoding { private int updateCounter(char[] result, int current, int counter){ int tempCounter = counter; int len = 1; while(tempCounter > 0){ len = len*10; tempCounter /= 10; } len = len/10; while(counter > 0){ result[current++] = (char)((counter/len) + '0'); counter = counter%len; len /= 10; } return current; } public int encoding(char[] str,char[] result){ char pickedChar = str[0]; int current =0; int counter =1; for(int i=1; i < str.length; i++){ if(str[i] == pickedChar){ counter++; } else{ result[current++] = pickedChar; current = updateCounter(result, current, counter); pickedChar = str[i]; counter =1; } } result[current++] = pickedChar; current = updateCounter(result, current, counter); return current; } public static void main(String args[]){ String str = "AAAAAAAAAAAAABBCDDEEEEE"; char result[] = new char[str.length()*2]; RunLengthEncoding rle = new RunLengthEncoding(); int current = rle.encoding(str.toCharArray(),result); for(int i=0; i < current; i++){ System.out.print(result[i]); } } }