码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-08-24 22:44:30      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:turn   int   else   比较   试题   时间   ==   lis   fir   

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

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

前段时间面试遇到的面试题,当时的想法是首先将字符串拆分成字符数组,然后拿两个数组去做比较,可惜由于基础不是很扎实,当时的for循环比较写成了这个样子

for (int i = 0; i < arrStr1.length; i++)
{
    for (int j = 0; j < arrStr2.length; j++)
    {
        if (arrStr1[i] == arrStr2[j + cnt])
        {
            str += arrStr1[i].ToString();
            cnt++;
            break;
        }
        else{
            continue;
        }
    }
}

感觉有问题但是当时又想不到问题出在哪,然后连面试的机会也没有了。。。=_=


后来发现自己当时的问题是随意改变了外层for循环的指向,导致后边循环的乱套了。。。。

现在的理解思路是,首先要保证arrStr1的指向不变,然后挨个去和arrStr2数组的每一个值去做比较,如果相等,就拿arrStr1的下一个值来和arrStr2的下一个值比较(问题就在这里,不应该通过循环外层的for循环来让arrStr1获取下一个值,而是应该让arrStr1的指向不变,通过i+cnt来获取下一个值),如果不相等,那么循环外层for循环,改变arrStr1的指向来获取数组的下一个值,然后重复上边的比较操作,最后经过些许完善得出下面的方法

 public static string Show(string CompareStr1, string CompareStr2)
{
    //将两个字符串拆分成字符数组 使用ToCharArray方法
    var arrStr1 = CompareStr1.ToCharArray();
    var arrStr2 = CompareStr2.ToCharArray();
    List<CompareResult> list = new List<CompareResult>();
    var str = "";
    var cnt = 0;
    for (int i = 0; i < arrStr1.Length; i++)
    {
        str = "";
        cnt = 0;
        if (!arrStr2.Any(o => o == arrStr1[i]))
        {
            continue;
        }
        for (int j = 0; j < arrStr2.Length; j++)
        {
            if (i + cnt >= arrStr1.Length)
            {
                i = arrStr1.Length;
                break;
            }
            else if (arrStr1[i + cnt] == arrStr2[j])
            {
                str += arrStr1[i + cnt].ToString();
                cnt++;
            }
            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; }
}

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

标签:turn   int   else   比较   试题   时间   ==   lis   fir   

原文地址:https://www.cnblogs.com/wangxiaojun1/p/11406224.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!