public static int Letters2Rec(string S, Seq seq) { var reader = new SeqReader(S); // Seq seq = reader.ReadNext(); if (seq == null) { return(0); } Seq nextSeq = reader.ReadNext(); if (nextSeq == null) { return(0); } Seq opt1 = seq.Clone(); Seq opt2 = seq.Clone(); int deleted1; int deleted2; opt1.MergeWith(nextSeq, 'A', out deleted1); opt2.MergeWith(nextSeq, 'B', out deleted2); int total1 = deleted1 + Letters2Rec(S.Substring(reader.CurrentPos), opt1); int total2 = deleted2 + Letters2Rec(S.Substring(reader.CurrentPos), opt2); // Console.WriteLine(seq); // Console.WriteLine(opt1); // Console.WriteLine(opt2); // Console.WriteLine(); return(total1 < total2 ? total1: total2); }
// public static int Letters(string S) // { // int totalDeleted = 0; // var reader = new SeqReader(S); // Seq seq = reader.ReadNext(); // Seq nextSeq; // // Console.WriteLine("Orig {0}", S); // while ((nextSeq = reader.ReadNext()) != null) // { // // Console.WriteLine($"Merged {seq}, next: {nextSeq}"); // seq.MergeWith(nextSeq, out var deleted); // totalDeleted += deleted; // } // // Console.WriteLine($"Final: {seq}"); // return totalDeleted; // } public static int Letters2(string S) { var reader = new SeqReader(S); Seq seq = reader.ReadNext(); return(Letters2Rec(S.Substring(reader.CurrentPos), seq)); }