求一个字符串中出现的相同且长度最长的字符串,及其首字符的位置

来源:互联网 发布:虚拟机和系统网络连接 编辑:程序博客网 时间:2024/05/01 22:41

思路:对源字符串所有后缀的所有子串,从每一个后缀的最长子串开始,分别从前向和后向开始在源字符串中查找匹配的子串,若两次查找位置不一致则说明存在重复的长度最长的字串,并返回前向查找时的位置。

e.g. 

string = “abcedfghiabckl‘,当使用子串”abc“在源字符串中分别前向和后向匹配时,找到的位置分别为pos1=0, pos2 = 9.

//求一个字符串中出现的相同且长度最长的字符串pair<string, int> func2(string str){string strTemp;int i, j;int iLen = str.length();for (i = 0; i < iLen; i++){for (j = iLen; j > 1; j--)  //从每个后缀的最长子串开始{if (i + j <= iLen)  //确保获取子串不会越界{size_t pos1, pos2;strTemp = str.substr(i, j);pos1 = str.find(strTemp);pos2 = str.rfind(strTemp);if (pos1 != pos2)  //位置不一致则说明存在重复子串{return make_pair(strTemp, pos1 + 1);}}}}return make_pair("", -1);}