题解 | #公共子串计算#

公共子串计算

https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b

// HJ65 查找两个字符串a b 中的公共部分的最长字串.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include<iostream>
#include<bits/stdc++.h>

using namespace std;

string a, b;//定义两个全局的字符串ab

string cut(int r, int l)//获取截取到的第i-j位的a字符串的内容并返回出去
{
	string tmp;//定义一个需要放截取字符串的数据类型
	for (int i = r; i <= l; i++)//遍历从r到l的长度
	{
		tmp += a[i];//将r到l长度的a串存储到tmp里
	}
	return tmp;//返回截取的字符串
}

int main()//main函数
{
	while (cin >> a >> b)//可以多组输入连续判断,按ctrl+z退出
	{
		string res = "";//建立一个最长的需要输出的字符串,即为重复的最长的字符串
		if (a.size() > b.size())swap(a, b);//如果a的长度比b长就交换ab的内容,保证a一直在前面
		for (int i = 0; i < a.size(); i++)//遍历a字符串
		{
			for (int j = i; j < a.size(); j++)//遍历a字符串每次加一位
			{
				string tmp = cut(i, j);//获取截取的当前字符串
				if (b.find(tmp) != string::npos)//在b里搜索目前截取的a的字符串是否能查到重复项
				{
					if (tmp.size() > res.size())//判断新串是否比之前的长,如果长则替换
					{
						res = tmp;//替换之前较短的字符串
					}
				}
			}
		}
		cout << res.size() << endl;//输出重复且最长的字符串
	}
	return 0;//返回0表示程序结束
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务