What are the best algorithms available to find longest repeating patterns of characters in a string using .net?
- 3You will have to be more specific. Maybe give some examples. Also, have you done any research yourself already? If so, tell us what you found.Björn Pollex– Björn Pollex2011-03-15 12:28:57 +00:00CommentedMar 15, 2011 at 12:28
- 1you can build a dictionary, like what lossless data compression algorithms do. See for exampleen.wikipedia.org/wiki/Dictionary_coderNick Dandoulakis– Nick Dandoulakis2011-03-15 12:40:35 +00:00CommentedMar 15, 2011 at 12:40
- 1your 'edit' does not make it any less vague, IMO.Try to do what Space_C0wb0y suggest.Bart Kiers– Bart Kiers2011-03-15 13:02:43 +00:00CommentedMar 15, 2011 at 13:02
- 1I'm unsure why you want thelongest pattern. Clearly for the string "abcabca" the pattern "abc" is more interesting than "abcabc"Thomas Ahle– Thomas Ahle2011-03-15 13:44:05 +00:00CommentedMar 15, 2011 at 13:44
2 Answers2
I guess that you speak aboutpattern discovery. Take a look at some elementary aproach (source)
private static Dictionary<string, int> FindPatterns(string value) { List<string> patternToSearchList = new List<string>(); for (int i = 0; i < value.Length; i++) { for (int j = 2; j <= value.Length / 2; j++) { if (i + j <= value.Length) { patternToSearchList.Add(value.Substring(i, j)); } } } // pattern matching Dictionary<string, int> results = new Dictionary<string, int>(); foreach (string pattern in patternToSearchList) { int occurence = Regex.Matches(value, pattern, RegexOptions.IgnoreCase).Count; if (occurence > 1) { results[pattern] = occurence; } } return results;}static void Main(string[] args) { Dictionary<string, int> result = FindPatterns("asdxgkeopgkajdflkjbpoijadadafhjkafikeoadkjhadfkjhocihakeo"); foreach (KeyValuePair<string, int> res in result.OrderByDescending(r => r.Value)) { Console.WriteLine("Pattern:" + res.Key + " occurence:" + res.Value.ToString()); } Console.Read();}The algorithm consist of 2 stages.
- Choose pattern
- Find pattern in input string (Algorithm ofpattern matching)
It is used Regex for pattern matching. There are other more advanced algorithms. These algorithms are enlisted on addresshttp://www-igm.univ-mlv.fr/~lecroq/string/However, code samples are written in C. Also you'd take a look onBoyer-Moore algorithm for pattern matching, written in C#
2 Comments
Pseudocode:
For N=1 to InputString.Length-1 rotatedString = RotateStringByN(InputString,N) For N=0 to InputString.Length-1 StringResult[N] = if (rotatedString[N]==InputString[N]) then InputString[N] else Convert.ToChar(0x0).ToString() RepeatedStrings[] = String.Split(StringResult, Convert.ToChar(0x0).ToString()) SaveLongestStringFrom(RepeatedStrings)... Or just look here atSO thread for other solutions.
Comments
Explore related questions
See similar questions with these tags.
