using System.Text.RegularExpressions;
public static void Main()
Console.WriteLine("aaabccccdd" +" - " +Compression1("aaabccccdd"));
Console.WriteLine("yyyyyzzzzzzzzzz" +" - "+Compression1("yyyyyzzzzzzzzzz"));
Console.WriteLine("abcd" +" - "+ Compression1("abcd"));
Console.WriteLine("hhhccchhhccc" +" - "+Compression1("hhhccchhhccc"));
Console.WriteLine( ""+ " - "+Compression1(""));
Console.WriteLine("a" +" - "+Compression1("a"));
Console.WriteLine("AAAaaabbbBBB" +" - "+ Compression1("AAAaaabbbBBB"));
Console.WriteLine("AAAaaabbbBBB" +" - "+ Compression1("AAAaaabbbBBB",false));
Console.WriteLine("Method 2");
Console.WriteLine("aaabccccdd" +" - " +Compression2("aaabccccdd"));
Console.WriteLine("yyyyyzzzzzzzzzz" +" - "+Compression2("yyyyyzzzzzzzzzz"));
Console.WriteLine("abcd" +" - "+ Compression2("abcd"));
Console.WriteLine("hhhccchhhccc" +" - "+Compression2("hhhccchhhccc"));
Console.WriteLine( ""+ " - "+Compression2(""));
Console.WriteLine("a" +" - "+Compression2("a"));
Console.WriteLine("AAAaaabbbBBB" +" - "+ Compression2("AAAaaabbbBBB"));
Console.WriteLine("AAAaaabbbBBB" +" - "+ Compression2("AAAaaabbbBBB",false));
public static string Compression1(string inputStr,bool isCaseAllowed = true)
inputStr = inputStr.ToLower();
return Regex.Replace(inputStr, @"(.)\1*", k => k.Groups[1].Value +
(k.Value.Length == 1 ? preChara : k.Value.Length.ToString()));
public static string Compression2(string a, bool isCaseAllowed = true)
for (int i = 0; i < n; i++)
while (i < n - 1 && a[i] == a[i + 1])
m = m + a[i] + count.ToString();