题解 | #公共子串计算#
公共子串计算
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表示程序结束
}
