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 @   似梦亦非梦  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
点击右上角即可分享
微信分享提示