题意
输出一个数。这个数是子串中最少出现两次的最长子串的长度。
思路
首先输入字符串
a
a
a
用一个
m
a
p
map
map记录某个字符串出现过的次数。
当次数
≥
2
\ge2
≥2时,记录最长的长度。
因为题目是字串,所以说直接双重
f
o
r
for
for循环就好了。
第一重循环
i
i
i是枚举起点。
第二重是以
i
i
i为起点的所有字串。
代码
#include<bits/stdc++.h>
#include<cstring>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#include<map>
#define ll long long
using namespace std;
const int N=1e5+10;
const int M=2023;
const int inf=0x3f3f3f3f;
string a;
map<string,int> mp;
int maxx=2,pos;
int main()
{
cin>>a;
for(int i=0;i<a.size();i++)
{
string b;
for(int j=i;j<a.size();j++)
{
b+=a[j];
mp[b]++;
if(mp[b]>=2 and b.size()>=pos)
{
pos=b.size();
}
}
}
cout<<pos;
return 0;
}