最长公共子串
最长公共子串
http://www.nowcoder.com/questionTerminal/f33f5adc55f444baa0e0ca87ad8a6aac
题目
动态规划想不出来,想了个接近人思考过程的算法,没想到效果还挺好,主要是考虑到如果当前最长子串的长度已经很长了,就没必要遍历最后短暂的字符串了。
class Solution {
public:
/**
* longest common substring
* @param str1 string字符串 the string
* @param str2 string字符串 the string
* @return string字符串
*/
string LCS(string str1, string str2) {
string res="";
int reslen=0;
for(int i=0;i<str1.size()-reslen;i++){
for(int j=0;j<str2.size()-reslen;j++){
if(str1[i]==str2[j]){
string tmps = string(1, str1[i]);
for(int p = i+1,q=j+1;p<str1.size() && q<str2.size() && str1[p]==str2[q]; p++,q++){
tmps = tmps+str1[p];
}
if(tmps.size()>reslen){
res = tmps;
reslen = res.size();
}
}
}
}
return res;
}
};
