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

问题描述

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

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

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

【样例输入】
ababa

【样例输出】
3

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

解决方案

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

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

解决方案二:

   var q= ""ababa"".ToCharArray()           .GroupBy(x=>x)           .Where(g=>g.Count()>=2)           .OrderByDescending(g=>g.Count())           .FirstOrDefault();  Console.WriteLine( q==null?0:q.Count());

解决方案三:
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 . . .

时间: 2025-01-01 15:44:46

字符串中最长并至少出现2次的子串的相关文章

求字符串中最长无重复字符的子串

题目:求一个字符串中最长的没有重复字符的子串. 方法一:穷举法,使用2重外循环遍历所有的区间,用2重内循环检验子串是否符合"无重复字符"这一要求.其中外层循环i.j 遍历所有的下标,m.n是内层循环,检查区间[i,j]是否符合要求.空间复杂度是O(1),时间复杂度O(N^4). //O(N^4)的时间复杂度 int max_unique_substring1(char * str) { int maxlen = 0; int begin = 0; int n = strlen(str)

返回给定字符串中最长连续数字串

/* 不用任何库函数,系统函数, 完成函数 int maxContinuNum(const char* inputstr,char *outputstr); 返回给定字符串中最长连续数字串,让outputstr指向该串,然后值是其长度. 例如sss12345ss1245sfdf123456789返回,9,outputstr指向123456789. */ #include <iostream> using namespace std; int maxContunuNum(const char*

c语言输出字符串中最大对称子串长度的3种解决方案_C 语言

问题描述: 输入一个字符串,输出该字符串中最大对称子串的长度.例如输入字符串:"avvbeeb",该字符串中最长的子字符串是"beeb",长度为4,因而输出为4. 解决方法:中序遍历 一,全遍历的方法: 1.全遍历的方法,复杂度O(n3); 2.遍历原字符串的所有子串,然后判断每个子串是否对称: 实现方法是:我们让一个指针i从头至尾遍历,我们用另一个指针j从j=i+1逐一指向i后面的所有字符.就实现了原串的所有子串的遍历(子串为指针i到j中间的部分);最后判断得到的

[华为机试练习题]43.在字符串中找出连续最长的数字串

题目 描述: 请一个在字符串中找出连续最长的数字串,并把这个串的长度返回:如果存在长度相同的连续数字串,返回最后一个连续数字串: 注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串"1234"的长度就小于数字串"1359055",如果没有数字,则返回空字符串("")而不是NULL! 样例输入 abcd12345ed125ss123058789 abcd12345ss54761 样例输出 输出123058789,函数返回值9 输出547

在SQL中获取一个长字符串中某个字符串出现次数的实现方法

以下是对在SQL中获取一个长字符串中某个字符串出现次数的实现方法进行了详细的分析介绍,需要的朋友可以参考下   在SQL中获取一个长字符串中某个字符串出现次数的实现方法 比如有个字符串: X-BGS-2010-09-15-001 我想知道其中'-'出现的次数,可以用下面的方法实现,而不需要复杂的一个个字符分析. declare @a varchar(100) set @a='X-BGS-2010-09-15-001' select len(replace(@a,'-','--'))-len(@a

java-求字符串中相同最长的字串

问题描述 求字符串中相同最长的字串 用java程序写 题目:输入一行字母组成的字符串,找出其中出现的相同且 长度最长的字符串,输出它及其首字符的位置. 如yyabrdabjcabreg,则输出为abr,3.异常情况输出-1 解决方案 /** * 思路:"abdab" 拆分情况:1.ab abd abda abdab 2.bd bda bdab 3 da dab 4 ab 5 b * * @param str * @return */ public static String find(

Javascript 中的长字符串拼接

Javascript 中的长字符串拼接 2011-07-11 16:00 佚名 互联昂网  字符串拼接是所有程序设计语言都需要的操作.当拼接结果较长时,如何保证效率就成为一个很重要的问题. C 语言的 strcat 函数直接操作内存,效率自然最高:C++ 的 string 类是可变的,本质上也是直接操作内存,效率也不在话下:Java 的 String 类不可变,字符串拼接意味着产生新对象,因此提供了专门用于字符串拼接的 StringBuffer 类,也保证了执行效率. 在 Javascript

字符串中找出连续最长的数字字符串的实例代码_C 语言

复制代码 代码如下: //1. 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) //功能: //在字符串中找出连续最长的数字串,并把这个串的长度返回, //并把这个最长数字串付给其中一个函数参数outputstr所指内存. //例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所指的值为123456789 #include<stdio.

利用Collections工具类获取字符串数组中最长的元素

package cn.com; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; //要求:获取字符串数组中最长的元素 //在这里要利用Collections的另一个max方法 //public static <T> T max(Collection<? extends T> coll, Comparator<?