public class Solution { public int MaximumLength(string s) { var counter = new Dictionary<(char, int), int>(); for (var l = 0; l < s.Length; ++l) { var c = s[l]; var substringLength = 0; for (var r = l; r < s.Length && c == s[r]; ++r) { ++substringLength; var key = (c, substringLength); counter[key] = 1 + (counter.ContainsKey(key) ? counter[key] : 0); } } return counter.Select(pair => { if (pair.Value < 3) { return null; } var (c, length) = pair.Key; return (int?)length; }).Max() ?? -1; } }