3388 - 字符串练习

给出一个字符串s,求出s中相同的子串中最长的字串,并求出最长字串的首字母的位置,如果出现多组最长字串,只输出按字母序从小到大,第一个最长的相同字串的位置。例如:字符串s为:aabcdttabcdettaabcftt   它的最长相同字串有两个abcd和aabc长度都为4,这两字符串均为s的最长相同字串,但输出时只需输出aabc和aabc第一次出现的位置,因为aabc小于abcd。  

题目输入

输入为一行,为一个字符串s,保证s中有相同字串且字符串长度小于100. 

题目输出

为两行,第一行为最长相同字串,第二行为此字串第一次出现的位置。

输入/输出样例

题目输入

aabcdttabcdettaabcftt 

题目输出

aabc
0

提示

题目来源:吕红波

C++解答

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
	string s1,s[11000],s2,s3[11000],s4[11000];
	int wei=-1,a=0,b=0,t=0,h,w=-1;
	cin>>s1;
	int len=s1.size();
	for(int i=0;i<=len-1;i++)
	  for(int j=1;j<=len-i;j++)
	  {
	     s2=s1.substr(i,j);
	     wei=s1.find(s2,j+i);
	     if(wei!=-1)
	     {
	       s[a]=s2;
	       a++;
	     }
	     else
	      continue;
	  }
	for(int i=0;i<=a-1;i++)
	{
		h=s[i].size();
		if(h>=t)
	      {
	      	 t=h;
	      	 s3[b]=s[i];
	      	 b++;
	      }		 
	}
	for(int i=0;i<=b-1;i++)
	  if(s3[i].size()==t)
	  {
	  	w++;
	    s4[w]=s3[i];
	  }
	 sort(s4+0,s4+w+1,less<string>());
	 s2=s4[0];
	cout<<s2<<endl;
	cout<<s1.find(s2,0)<<endl;
	  
	
}

提示

题目来源:吕红波

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题