package com.anuragkapur.ctci.arraysandstrings; /** * @author: anuragkapur * @since: 07/05/2014 */ public class Prob1_5_CompressString { /** * Run time complexity: O(n) * Space complexity: O(n) * * @param str * @return */ public static String compressedString(String str) { if(str.length() == 0) { return str; } char ch[] = str.toCharArray(); char current = ch[0]; int count = 1; StringBuffer solution = new StringBuffer(); for (int i=1; i<ch.length; i++) { if(ch[i] == current) { count ++; } else { solution.append(String.valueOf(current)); solution.append(String.valueOf(count)); current = ch[i]; count = 1; } } solution.append(String.valueOf(current)); solution.append(String.valueOf(count)); String candidateSolution = solution.toString(); if(candidateSolution.length() < str.length()) { return candidateSolution; } else { return str; } } }