给定一个字符串,求出其最长的重复子串。
2013-04-17 16:27
477 查看
#include "stdafx.h" #include <stdio.h> #include <iostream> #include <string> #include <algorithm> #include <vector> using namespace std; class LongestCommonString { vector<string> suffixArray; size_t len; public: //构造方法 LongestCommonString(string s) { //构造后缀数组 for(size_t i = 0; i < s.length(); ++i) { suffixArray.push_back(s.substr(i)); } //排序 sort(suffixArray.begin(), suffixArray.end()); len = suffixArray.size(); } //两两比较,返回最长长度的子串 string lcpCompare() { size_t maxLength = 0; size_t index = 0; for(size_t i = 0; i < len - 1; ++i) { size_t temp = lcp(suffixArray.at(i), suffixArray.at(i+1)); if(temp > maxLength) { maxLength = temp; index = i; } } return suffixArray.at(index).substr(0, maxLength); } //返回重复的长度 size_t lcp(const string& a, const string& b) { size_t i = 0; while(a[i] == b[i]) { ++i; } return i; } }; int main() { string h = "hello"; string word = "aacaagmtttacaagmc"; LongestCommonString slcp(word); cout << "最长重复子串为:" << slcp.lcpCompare() << endl; }
参考资料:http://www.cnblogs.com/jerry19880126/archive/2012/08/05/2623954.html
相关文章推荐
- 给定一个字符串,求出其最长的重复子串
- 给定一个字符串,返回字符串中没有重复字符的最长子串的长度
- 给定一个字符串,求出其最长的重复子串的长度
- 给定一个字符串,求出其最长的重复子串。
- 给定一个字符串,输出最长的重复子串
- 给定一个字符串,输出最长的重复子串
- 给定一个字符串,求出其最长的重复子串。
- 【每日面试题】给定一个字符串,求出其最长的重复子串
- 每日面试题:给定一个字符串,求出其最长的重复子串
- 求给定的某一个字符串中的最长的没有重复字符的子串的长度
- 给定一个字符串,求出其最长的重复子串
- 给定一个字符串,找到最长的子串的长度没有重复字符
- 字符串操作问题:查找给定字符串中,连续重复且长度最长的第一个子串
- 求给定字符串中最长重复子串
- 用三重循环求一个字符串的最大回文串(连续重复出现的最长子串)
- 寻找一个字符串中最长的重复子串,如 abcdabc 最长重复串 是abc
- 寻找一个字符串中最长的重复子串
- leetcode第三题:求给定字符串中最长无重复子串的长度
- 求一个字符串当中的最长重复子串
- 自己写的一个后缀树算法查找一个字符串的最长重复子串