3388 - 字符串练习
时间限制 : 1 秒
内存限制 : 128 MB
给出一个字符串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; }