算法问题求解 关于字符串处理

给定两个长度为n的字符串 X,Y
现对X的任意长度的连续子串有两种操作:
1. 按字母表顺序前进一位 如 a -> b aa->bb ac->bd
2. 按字母表顺序后退一位 如 b -> a bcd ->abc
求从X->Y的最小操作步骤(只有小写字母)

样例输入:
cccaba aaaccc
输出:
5

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Q699794
{
    class Program
    {
        static IEnumerable<Tuple<int, int>> substrs(string s1, string s2)
        {
            for (int i = 0; i < s1.Length; i++)
            {
                for (int j = 1; j < s1.Length - i + 1; j++)
                {
                    yield return new Tuple<int, int>(i, j);
                }
            }
        }

        static string transtr(string s, int n)
        {
            string r = "";
            for (int i = 0; i < s.Length; i++)
            {
                int ch = (s[i] - n);
                if (ch < 'a') ch += 26;
                if (ch > 'z') ch -= 26;
                r += ((char)ch).ToString();
            }
            return r;
        }

        static bool trytans(string s1, string s2)
        {
            int n = s1[0] - s2[0];
            return transtr(s1, n) == s2;
        }

        static int solve(string s)
        {
            string[] arr = s.Split(' ');
            int cnt = 0;
            while (arr[0] != arr[1])
            {
                foreach (var i in substrs(arr[0], arr[1]).OrderByDescending(x => x.Item2))
                {
                    if (arr[0].Substring(i.Item1, i.Item2)[0] == arr[1].Substring(i.Item1, i.Item2)[0])
                        continue;
                    if (trytans(arr[0].Substring(i.Item1, i.Item2), arr[1].Substring(i.Item1, i.Item2)))
                    {
                        arr[0] = arr[0].Substring(0, i.Item1) + arr[1].Substring(i.Item1, i.Item2) + arr[0].Substring(i.Item1 + i.Item2);
                        Console.WriteLine(arr[0]);
                        cnt++;
                        goto l2;
                    }
                }
            l2:
                ;
            }
            return cnt;
        }

        static void Main(string[] args)
        {
            string input = "cccaba aaaccc";
            //input = Console.ReadLine();
            int c = solve(input);
            Console.WriteLine(c);
        }
    }
}

aaaaba
aaacba
aaacca
aaaccc
4
Press any key to continue . . .

结果应该是4才对。

不知道连续子串什么意思,按我的理解只需要3步。cccaba->aaaaba->aaacdc->aaaccc。