using System.Collections.Generic;
public class PatternCount
public int Count { get; set; }
public string Pattern { get; set; }
public static void Main()
Console.WriteLine("Enter input string:");
var searchString = Console.ReadLine();
Console.WriteLine("Enter input length:");
if (int.TryParse(Console.ReadLine(), out int patternLen))
var patterns = CountAndFilterInput(searchString, patternLen, minOccurance);
Console.WriteLine("Patterns:");
foreach (var pattern in patterns)
Console.WriteLine($"{pattern.Pattern} => {pattern.Count}");
Console.WriteLine("Please enter a valid number..");
public static IEnumerable<string> InputString(string input, int size)
for (int i = 0; i + size <= input.Length; i++)
yield return input.Substring(i, size);
public static List<PatternCount> CountAndFilterInput(string input, int size, int minCount)
if (string.IsNullOrEmpty(input))
throw new ArgumentException("Please enter valid input.");
throw new ArgumentOutOfRangeException("Pattern length should greater than zero.");
var result = (from pattern in InputString(input, size)
group pattern by pattern into grouping
where grouping.Count() >= minCount