您的位置:首页 > 编程语言

GEEK编程练习— —最长相同的子串

2016-05-02 19:03 267 查看

题目

输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它及首字符的位置。

输入

yyabcdabjcabceg


输出

abc
3


解析

首先声明一下,假如字符串为aaaaaa,答案应该为aaaaa。两个个等长的子串可以有部分字符重叠。

以abcab为例子分析如下:

首先寻找长度为4的子串,只能是abca和bcab,再查看这两个子串是否有其他相同的子串。有的话直接输出结果并退出程序。

然后寻找长度为3的子串,只能abc,bca,cab。这3个子串都没有其他相同的子串。

最后寻找长度为2的子串,首先是ab,用find函数返回在abcab中正序查找的位置0,用rfind函数返回在abcab中逆序查找的位置3。这两个位置不相等,说明在不同的位置存在相同的子串ab。

代码

#include <iostream>

using namespace std;

pair<int,string> fun(const string &str)
{
int count = 0;
string substrs, tep;
int i, j, len = str.length();
for(i = len - 1; i >= 1; --i)
{
for(j = 0; j <= len - i; j++)
{
size_t t = 0;
size_t num = 0;
tep = str.substr(j,i);
t = str.find(tep);
num = str.rfind(tep);
if(t != num)
{
count = t + 1;
substrs = tep;
return make_pair(count, substrs);
}
}
}
return make_pair(count, substrs);
}
int main()
{
string str;
pair<int,string> rs;
cin >> str;
rs = fun(str);
cout << rs.second << endl << rs.first << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++