一、运行结果
二、题目
三、思路
题目要求的时间和空间复杂度都比较宽松,这里采用暴力解法,从运行结果来看,效率还是不错的。具体思路:逐个遍历str1中的字符,对于每个字符,从str2中找到与str1中相同的字符,则从该位置开始有一个公共子串(str1的每个字符在str2中可能对应多个子串),然后当前子串的最大长度,若当前子串大于之前找出的结果子(ansstr)串最大长度,则更新结果子串,直至将str1串遍历完成。
四、代码
class Solution {
public:
string LCS(string str1, string str2) {
string ansstr;
int len1 = str1.size();
int len2 = str2.size();
for(int i=0; i<len1; i++){
for(int j=0; j<len2; j++){
if(str2[j] == str1[i]){ //两个串当前位置字符相同
string curstr; //保存当前公共子串
int k = j, t = i;
while(k < len2 && str2[k] == str1[t]){
curstr += str2[k];
k++;
t++;
}
if(curstr.size() > ansstr.size()){
ansstr = curstr;
}
}
}
}
return ansstr;
}
};