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();
		
	}

}
posted @ 2024-12-12 12:58  似梦亦非梦  阅读(26)  评论(0编辑  收藏  举报