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

Posted wangxiaojun1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取两个字符串中最长相等的字符串相关的知识,希望对你有一定的参考价值。

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

例:“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; 

以上是关于获取两个字符串中最长相等的字符串的主要内容,如果未能解决你的问题,请参考以下文章

比较两个字符串最长有多少个连续字符相等

LeetCode 1624. 两个相同字符之间的最长子字符串 / 698. 划分为k个相等的子集 / 面试题 01.08. 零矩阵 / 1694. 重新格式化电话号码

LeetCode 1624. 两个相同字符之间的最长子字符串 / 698. 划分为k个相等的子集 / 面试题 01.08. 零矩阵 / 1694. 重新格式化电话号码

521. 最长特殊序列 Ⅰ『简单』

最长公共子串(动态规划)

java求最长公共子串的长度