参考 http://blog.youkuaiyun.com/steven30832/article/details/8260189
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <assert.h>
static bool LCS(const std::string & str1,
const std::string & str2, std::string & result)
{
int i = 0, j = 0, max_length = -1, last_index = -1;
std::vector<int> v;
if(str2.size() <= 0)
return false;
v.resize(str2.size(), 0);
for(i = 0; i < str1.size(); i++)
for(j = str2.size() - 1; j >= 0; j--)
{
if(str1[i] == str2[j])
{
v[j] = (j - 1 < 0? 0 : v[j-1]) + 1;
if(v[j] > max_length)
{
max_length = v[j];
last_index = j;
}
}
else
v[j] = 0;
}
result = str2.substr(last_index - max_length + 1, max_length);
return true;
}
int main(int argc, char * argv[])
{
std::string subStr;
assert(LCS("abcd", "cbcc", subStr));
std::cout << subStr << std::endl;
system("pause");
}