题目
输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它及首字符的位置。
输入
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)
{