1 #include"iostream"
 2 #include"string"
 3 #include"string.h"
 4 #include"vector"
 5 #include"algorithm"
 6 using namespace std;
 7 
 8 vector<string> subStr;
 9 
10 void GetSubStr(string str)
11 {
12     subStr.clear();
13     for(int i=0;i<str.length();i++)
14     {
15         subStr.push_back(str.substr(i,str.length()-i));
16     }
17     sort(subStr.begin(),subStr.end());
18   //  for(int i=0;i<str.length();i++)
19    //     cout<<subStr[i]<<endl;
20 }
21 
22 int CommonHead(string str1,string str2)
23 {
24     int i=0,j=0,len=0;
25     while(i<str1.length()&&j<str2.length())
26     {
27         if(str1[i++]==str2[j++])
28             len++;
29         else
30             break;
31     }
32     return len;
33 }
34 
35 pair<string,int> GetRes(int length)
36 {
37     int resLen=0,resIndex=-1,tempLen;
38     string resSub;
39     for(int i=0;i<subStr.size()-1;i++)
40     {
41         tempLen=CommonHead(subStr[i],subStr[i+1]);
42         if(tempLen>resLen)
43         {
44             resLen=tempLen;
45             resIndex=length-max(subStr[i].length(),subStr[i+1].length())+1;
46             resSub=subStr[i].substr(0,resLen);
47         }
48     }
49     if(resIndex!=-1)
50         return make_pair(resSub,resIndex);
51     else
52         return make_pair("no answer",-1);
53 }
54 
55 int main()
56 {
57     string src;
58     while(cin>>src)
59     {
60         GetSubStr(src);
61         pair<string,int> res=GetRes(src.length());
62         cout<<res.first<<" "<<res.second<<endl;
63     }
64     return 0;
65 }
View Code

 官方答案:

 1 #include"iostream"
 2 #include"string"
 3 using namespace std;
 4 int main()
 5 {
 6     string str,tep;
 7     cout<<"please input the string:"<<endl;
 8     cin>>str;
 9     for(int  i=str.length()-1;i>1;i--)
10     {
11         for(int j=0;j<str.length();j++)
12         {
13             if(j+i<=str.length())
14             {
15                 size_t t=0;
16                 size_t num=0;
17                 tep=str.substr(j,i);
18                 t=str.find(tep);
19                 num=str.rfind(tep);
20                 if(t!=num)
21                 {
22                     cout<<tep<<" "<<t+1<<endl;
23                     return 0;
24                 }
25             }
26         }
27     }
28     return 0;
29 }
View Code

 

转载于:https://www.cnblogs.com/acm-jing/p/10369575.html

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐