using System.Collections.Generic;
public static void Main()
Console.WriteLine("Enter input string: ");
string inputString = Console.ReadLine();
while (string.IsNullOrEmpty(inputString))
Console.WriteLine("Input string cannot be empty. Please enter input string to find patterns ");
inputString = Console.ReadLine();
Console.WriteLine("Enter pattern length: ");
while (!int.TryParse(Console.ReadLine(), out patternLength))
Console.WriteLine("Pattern length can only accept digits. Please enter valid number from 0-9 ");
List<string> reccursivePatterns = new List<string>();
for (int i = 0; i < inputString.Length-patternLength; i++)
string pattern = inputString.Substring(i, patternLength);
reccursivePatterns.Add(pattern);
var query = reccursivePatterns.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(y => new { Pattern = y.Key, Counter = y.Count() })
Console.WriteLine("Pattern : Occurrence ");
foreach (var q in query.ToList())
Console.WriteLine(q.Pattern + "\t : \t" + q.Counter);
string defaultInputString = "zf3kabxcde224lkzf3mabxc51+crsdtzf3nab=";
Console.WriteLine("Default Pattern : " + defaultInputString);
Console.WriteLine("Enter input string to search a pattern from default string or enter c to change the default string : " + defaultInputString );
string inputStringForSearch = Console.ReadLine();
while (string.IsNullOrEmpty(inputStringForSearch))
Console.WriteLine("Input string cannot be empty. Please enter input string to find patterns ");
inputStringForSearch = Console.ReadLine();
if (inputStringForSearch == "C" || inputStringForSearch == "c")
Console.WriteLine("Enter input string to change the default string : ");
defaultInputString = Console.ReadLine();
while (string.IsNullOrEmpty(defaultInputString))
Console.WriteLine("Input string cannot be empty. Please enter input string to find patterns ");
defaultInputString = Console.ReadLine();
Console.WriteLine("Enter input string to search a pattern from : " + defaultInputString);
inputStringForSearch = Console.ReadLine();
while (string.IsNullOrEmpty(inputStringForSearch))
Console.WriteLine("Input string cannot be empty. Please enter input string to find patterns ");
inputStringForSearch = Console.ReadLine();
int patternLength1 = inputStringForSearch.Length;
List<string> reccursivePatterns1 = new List<string>();
for (int i = 0; i < defaultInputString.Length - patternLength1; i++)
string pattern = defaultInputString.Substring(i, patternLength1);
if (pattern == inputStringForSearch)
reccursivePatterns1.Add(pattern);
var query1 = reccursivePatterns1.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(y => new { Pattern = y.Key, Counter = y.Count() })
Console.WriteLine("Pattern : Occurrence ");
foreach (var q in query1.ToList())
Console.WriteLine(q.Pattern + "\t : \t" + q.Counter);