题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=3442&rd=5868
用的是Brute Force 方法,搜索了所有的子串,所以效率极低,但题目限制了最大字符串长度为50,所以这种
方法在时间上可以接受,而且这道题目只是Level One 250分的题目。
更好的算法可以看 这篇博客,使用动态规划 (dynamic programming) 的思想 或 这篇博客。
代码如下:
#include <iostream>
#include <string>
using namespace std;
class TextCompressor{
public:
string longestRepeat(string sourceText);
};
string TextCompressor::longestRepeat(string sourceText)
{
int len = sourceText.length();
string longestSub, substr;
int maxLen = 0;
for (int pos = 0; pos < len; pos++) {
for (int sublen = 1; sublen <= (len - pos) / 2; sublen++) {
substr = sourceText.substr(pos, sublen);
if (string::npos != sourceText.find(substr, pos + sublen)) {
if (maxLen < sublen) {
maxLen = sublen;
longestSub = substr;
}
}
}
}
return longestSub;
}