2 tommypdl tommypdl 于 2014.12.02 14:57 提问

字符串中最长并至少出现2次的子串

作为依依的好朋友,技术男沛沛在依依生日时送给他一个超长字符串 S 。沛沛要依依在其中找出一个最长的字符串 T ,使得 T 在 S 中至少出现了两次,而他想说的秘密就藏在 T 中。
由于字符串实在是太长了,依依总是找不到合适的 T 。于是依依请你帮他找到这个 T 的长度。

【输入格式】
一行。一个字符串,即题目中说的S 。

【输出格式】
一行。一个整数,表示最长的 T 的长度。

【样例输入】
ababa

【样例输出】
3

「数据范围」
对于 30% 的数据,S长度 <= 100
对于 60% 的数据,S长度 <= 8000
对于 100% 的数据,S长度 <= 500000

3个回答

q107770540
q107770540   Ds   Rxr 2014.12.02 16:27

``` var q= "ababa".ToCharArray()
.GroupBy(x=>x)
.Where(g=>g.Count()>=2)
.OrderByDescending(g=>g.Count())
.FirstOrDefault();

Console.WriteLine( q==null?0:q.Count());```

q107770540
q107770540   Ds   Rxr 2014.12.02 16:28
   var q= "ababa".ToCharArray()
           .GroupBy(x=>x)
           .Where(g=>g.Count()>=2)
           .OrderByDescending(g=>g.Count())
           .FirstOrDefault();

  Console.WriteLine( q==null?0:q.Count());
caozhy
caozhy   Ds   Rxr 2014.12.03 04:08

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string s = "依依我不爱你还能爱谁,依依我不爱你才怪";
var query = Enumerable.Range(0, s.Length).Select(x => s.Substring(x)).OrderBy(x => x).ToArray();
int idx = 0; int max = 0;
for (int i = 1; i < query.Length; i++)
{
int same = query[i].Zip(query[i - 1], (x, y) => x == y).TakeWhile(x => x).Count();
if (same > max)
{
idx = i; max = same;
}
}
Console.WriteLine(query[idx].Substring(0, max));
}
}
}

依依我不爱你
Press any key to continue . . .

caozhy
caozhy Console.WriteLine(query[idx].Substring(0, max).Length);
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!