CF23A You're Given a String... 题解
Content
给定一个长度为 \(n\) 的字符串,求出至少出现两次的最长子串的长度。
数据范围:\(1\leqslant n\leqslant 100\)。
Solution
我们直接暴力求出每个子串,然后统计它的出现次数(可以直接用 \(\texttt{map}\) 映射),最后将出现次数 \(\geqslant 2\) 的所有子串的长度取个最大值即可。
Code
string s, ss[10007];
map<string, int> vis;
int main() {
cin >> s;
int len = s.size(), ans = 0, cnt = 0;
_for(i, 0, len - 1) {
_for(j, 0, i) {
cnt++;
_for(k, j, i)
ss[cnt] += s[k];
vis[ss[cnt]]++;
}
}
_for(i, 1, cnt) {
int len = ss[i].size();
if(vis[ss[i]] >= 2) ans = max(ans, len);
}
writeint(ans);
return 0;
}