您的位置:首页 > 其它

【算法】求两个字符串的最长子串

2015-09-12 17:01 267 查看
这是一个非最优解,使用两个游标,逐次遍历两个字符串:

/*++++++++++++++++++++++++++++++
求两个个字符串的公共最长字串
+++++++++++++++++++++++++++++++*/
bool GetMaxSubstr(const char* s1,const char* s2,char*sub)
{
	int pos1 = 0;
	int maxlen = 0;
	int len1 = strlen(s1),len2 = strlen(s2);
	for(int i = 0; i < len1; i++){
		for(int j = 0; j < len2; j++){
			int ii = i;
			int jj = j;
			while(jj < len2 && s1[ii] != s2[jj]) jj++;
			if(jj < len2){
				while(ii < len1 && jj < len2 && s1[ii] == s2[jj]){
					ii++;
					jj++;
				}
				if(maxlen < ii-i){
					maxlen = ii-i;
					pos1 = i;
				}
			}
		}
	}
	int pos2 = 0;
	while(pos2 < maxlen)
		sub[pos2++] = s1[pos1++];
	return maxlen > 0;
}


这个问题还有效率更好的解法:

//to be add...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: