static void Main(string[] args) { string A = "abcxpqef"; string B = "cxemnq"; Console.WriteLine("A:" + A); Console.WriteLine("B:" + B); MinimumEditDistance med = new MinimumEditDistance(); var C = med.CalculateDistance(A, B); var steps = med.GetPossibleDesicion(C, A.Length, B.Length); steps.ForEach(s => Console.WriteLine("Operation:{0},A[{1}],B[{2}]", s.operation, s.AIndex, s.BIndex)); Console.ReadKey(); }
public (string oContent, string cContent) MappingTokens(string o, string c, int errorCode) { string compareO = o; string compareC = c; var oTokens = o.Split(Sep, StringSplitOptions.RemoveEmptyEntries); var cTokens = c.Split(Sep, StringSplitOptions.RemoveEmptyEntries); if (o.Last() == '>' && c.Last() != '>') { string oLast = oTokens.Last(); c = $"{c} {oLast}"; } if (c.Last() == '>' && o.Last() != '>') { string cLast = cTokens.Last(); o = $"{o} {cLast}"; } if (oTokens.Last()[0] == '<' && oTokens.Last() != cTokens.Last()) { cTokens[cTokens.Length - 1] = oTokens.Last(); } var oTagArray = oTokens.Where(x => x[0] == '<').ToArray(); var cTagArray = cTokens.Where(x => x[0] == '<').ToArray(); if (oTagArray.SequenceEqual(cTagArray)) { return( string.Join(" ", oTokens), string.Join(" ", cTokens) ); } MinimumEditDistance <string> .RunWithBackTrack(oTagArray, cTagArray); var seq = MinimumEditDistance <string> .BackTrack("").ToArray(); Sanity.Requires(MinimumEditDistance <string> .IsUnique, errorCode); List <string> oTagList = new List <string>(); List <string> cTagList = new List <string>(); foreach (var item in seq.Reverse()) { if (item.Item1 == item.Item2) { oTagList.Add(item.Item1); cTagList.Add(item.Item2); continue; } if (item.Item1 == "") { cTagList.Add(""); continue; } if (item.Item2 == "") { oTagList.Add(""); continue; } oTagList.Add(item.Item1); cTagList.Add(item.Item1); } if (oTagList.Count != oTagArray.Length || cTagList.Count != cTagArray.Length) { ; } Sanity.Requires(oTagList.Count == oTagArray.Length, errorCode); Sanity.Requires(cTagList.Count == cTagArray.Length, errorCode); string newO = Merge(oTokens, oTagList); string newC = Merge(cTokens, cTagList); return(newO, newC); }