获取两个字符串中最长相等的字符串

例:“likeyou”和“loveyou” 输出“eyou”

/// <summary>
/// 首先要保证charStr1的指向不变,然后挨个去和charStr2数组的每一个值去做比较,
/// 如果相等,就拿charStr1 的下一个值来和charStr2的下一个值比较
/// (注意,不应该通过循环外层的for循环来让charStr1获取下一个值,而是应该让charStr1的指向不变,通过i+cnt来获取下一个值)
/// 如果不相等,那么循环外层for循环,改变charStr1的指向来获取数组的下一个值,然后重复上边的比较操作
/// </summary>
/// <param name="compareStr1"></param>
/// <param name="compareStr2"></param>
public static string Show(string compareStr1,string compareStr2)
{
    //将字符串拆分成字符数组
    var charStr1 = compareStr1.ToCharArray();
    var charStr2 = compareStr2.ToCharArray();
    List<CompareResult> list = new List<CompareResult>();
    int cnt = 0;
    string str;
    //循环charStr1字符数组
    for(int i = 0;i < charStr1.Length;i++)
    {
        cnt = 0;
        str = null;
        //判断charStr1[i]是否在charStr2数组中有值
        //没有值继续下一个循环
        if(!charStr2.Contains(charStr1[i]))
        {
            continue;
        }
        for(int j = 0;j < charStr2.Length;j++)
        {
            //i+cnt表示在i不变的而情况下,通过i+cnt来获取下一个值
            //如果charStr1的索引值大于等于charStr1的长度,则使外层循环的索引值i等于charStr1的长度
            if(i + cnt >= charStr1.Length)
            {
                i = charStr1.Length;
                break;
            }
            else if(charStr1[i + cnt] == charStr2[j])
            {
                cnt++;
                str += charStr2[j].ToString();
            }
            else
            {
                if(cnt > 0)
                {
                    break;
                }
            }
        }
        list.Add(new CompareResult { KeyStr = str,KeyCount = cnt });
    }
    var result = list.OrderByDescending(o => o.KeyCount).FirstOrDefault();
    return result.KeyStr;
}
public class CompareResult
{
    public string KeyStr { get; set; }
    public int KeyCount { get; set; }
}
posted @ 2019-08-24 21:56  小小均  阅读(525)  评论(0编辑  收藏  举报