获取两个字符串中最长相等的字符串
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. 重新格式化电话号码