const char* maxCommonString(char* str1, char* str2){
//判断非空性
if(str1 == NULL || str2 == NULL){
return NULL;
}
//计算两个字符串的大小,区分长短窜
int iLen1 = strlen(str1);
int iLen2 = strlen(str2);
int iSmallLen = iLen1 > iLen2 ? iLen2 : iLen1;
char* shortStr = iLen1 > iLen2 ? str2 : str1;
char* longStr = iLen1 > iLen2 ? str1 : str2;
//长窜是否包含短窜
char* subStr = (char*)strStr((const char*)longStr, (const char*) shortStr);
if(subStr != NULL)
return subStr;//包含的话直接返回,完事
//不包含,缩小子窜,继续strStr 比较,得到的子窜放在堆内存中
subStr = (char*)malloc(sizeof(char)*iSmallLen + 1);
//开始寻找最大的包含的子窜,从长度为iSmallLen-1的子串开始
for(int iLen = iSmallLen - 1; iLen > 0; iLen--){
//从索引idex开始的,长度为iLen的子窜
for(int idex = 0; idex <= iSmallLen - iLen; idex++){
memcpy((void *)subStr, (const void*)shortStr + idex, iLen);
subStr[iLen] = '\0';//末尾
// puts("subStr: ");
// puts(subStr);
if(NULL != strStr((const char*)longStr, (const char*) subStr)){
return subStr;
}
}
}
return NULL;
}
int main(){
char* p1 = "123456";
char* p2 = "02304";
const char* pstr = maxCommonString(p1, p2);
puts("maxCommonString:");
puts(pstr);
}
两个字符串的最大公共子窜
最新推荐文章于 2022-09-19 12:00:33 发布