using System.Collections.Generic;
public static void Main()
private static void findLongestString(string actualString, int allowedReplacement)
Dictionary<char, int> uniqueBucket = new Dictionary<char, int>();
int maxRepetitiveCharacter = 0;
string LongestString = string.Empty;
int LongestStringLength = 0;
for (WindowEnd = 0; WindowEnd < actualString.Length; WindowEnd++)
char character = actualString[WindowEnd];
if (!uniqueBucket.ContainsKey(character))
uniqueBucket.Add(character, 1);
uniqueBucket[character]++;
maxRepetitiveCharacter = Math.Max(maxRepetitiveCharacter, uniqueBucket[character]);
while (WindowEnd - WindowStart + 1 - maxRepetitiveCharacter > allowedReplacement)
LongestString = actualString.Substring(WindowStart, (WindowEnd - WindowStart));
LongestStringLength = Math.Max(LongestStringLength, LongestString.Length);
Console.WriteLine("String '" + actualString.Substring(WindowStart, (WindowEnd - WindowStart)) + "' has length " + LongestString.Length);
char leftCharacter = actualString[WindowStart];
maxRepetitiveCharacter = 1;
uniqueBucket[leftCharacter]--;
if (WindowEnd == actualString.Length - 1 && !(WindowEnd - WindowStart + 1 - maxRepetitiveCharacter > allowedReplacement))
LongestString = actualString.Substring(WindowStart, (WindowEnd - WindowStart + 1));
LongestStringLength = Math.Max(LongestStringLength, LongestString.Length);
Console.WriteLine("String '" + actualString.Substring(WindowStart, (WindowEnd + 1 - WindowStart)) + "' has length " + LongestString.Length);
Console.WriteLine("Longest substring length with same character '" + LongestStringLength);