using System.Collections.Generic;
public class SearchPattern
public static void Main()
var data = GetStringInput();
var patternLength = GetPatternLengthInput(data);
var results = MakePatterns(data, patternLength);
var dict = SearchAndCount(results);
Console.WriteLine("Press any key to exit");
public static string GetStringInput()
Console.WriteLine("Enter string input:");
var data = Console.ReadLine();
while (string.IsNullOrEmpty(data))
Console.WriteLine("please enter valid string:");
data = Console.ReadLine();
public static int GetPatternLengthInput(string data)
Console.WriteLine("Enter pattern length:");
var patternLengthAsString = Console.ReadLine();
while(!int.TryParse(patternLengthAsString, out patternLength) || patternLength > data.Length || patternLength <= 0)
Console.WriteLine("please enter a valid length integer");
patternLengthAsString = Console.ReadLine();
public static List<string> MakePatterns(string data, int length)
List<string> patterns = new List<string>();
for(int i = 0; i + length <= data.Length; i++)
patterns.Add(data.Substring(i, length));
public static IDictionary<string, int> SearchAndCount(List<string> patterns)
Dictionary<string, int> searchResults = new Dictionary<string, int>();
foreach(string pattern in patterns)
if (!searchResults.ContainsKey(pattern))
searchResults.Add(pattern, 1);
searchResults.TryGetValue(pattern, out count);
searchResults.Remove(pattern);
searchResults.Add(pattern, count+1);
DictCleanup(searchResults);
public static IDictionary<string,int> DictCleanup(IDictionary<string,int> dict)
foreach(var item in dict.Where(key => key.Value <= 1).ToList())
public static void DisplayOutput(IDictionary<string,int> dict)
Console.WriteLine("No pattern found in the provided string");
for (int i = 0; i < dict.Count; i++)
Console.WriteLine("String Pattern: {0}, Count: {1}",
dict[ dict.Keys.ElementAt(i)]);