1、提取两个字符串中的公共部分
题目
编写一个方法,求两个字符串的最长公共子串(Longest Common Substring)的长度。
输入:
• 两个字符串 str1 和 str2。
输出:
• 它们的最长公共子串的长度(即最大连续相同子串的长度)。
测试用例
输入字符串1 输入字符串2 期望输出 说明
"abcdef" "zcdemf" 3 最长公共子串为"cde"
"12345" "34567" 3 最长公共子串为"345"
"aaaa" "aaa" 3 最长公共子串为"aaa"
"" "abc" 0 空字符串无公共子串
"abc" "" 0 空字符串
代码
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
Run("abcdef", "zcdemf");
Run("12345", "34567");
Run("aaaa", "aaa");
Run("", "abc");
Run("abc", "");
Console.ReadKey();
}
public static void Run(string str1, string str2)
{
if (string.IsNullOrEmpty(str1) || string.IsNullOrEmpty(str2))
{
Console.WriteLine("无公共子串,子串长度为0");
return;
}
string targartRtr = string.Empty;
string shorttStr = str1.Length > str2.Length ? str2 : str1;
string longstr = shorttStr.Equals(str1) ? str2 : str1;
for (int subIndex =shorttStr.Length;subIndex > 0;subIndex--)
{
for (int i = 0; (i+subIndex) <=shorttStr.Length;i++)
{
string substr = shorttStr.Substring(i, subIndex);
if (longstr.IndexOf(substr) >= 0)
{
targartRtr = substr;
Console.WriteLine( "公共子串为:" + targartRtr + ",子串长度为:" + targartRtr.Length);
}
}
if (!string.IsNullOrEmpty(targartRtr)) //找出满足条件的跳出循环
{
break;
}
}
//Console.ReadKey();
}
}