打印出给定字符串中既是该字符串前缀又是该字符串后缀的最长部分,在C程序中

2023年 9月 23日 64.8k 0

打印出给定字符串中既是该字符串前缀又是该字符串后缀的最长部分,在C程序中

给定一个字符串,我们必须检查最长前缀的长度,它也是字符串的后缀,就像有一个字符串“abcab”,所以这里“ab”的长度为2,是最长的子字符串相同的前缀和后缀。

示例

Input: str[] = { “aabbccdaabbcc” }
Output: 6
Input: abdab
Output: 2

登录后复制

如果我们从字符串的开头和结尾开始指针,那么它们会在某个点重叠,所以我们不会这样做,而是从中间断开字符串并开始匹配左右字符串。如果它们相等,则任何一个匹配字符串的返回大小相同,否则尝试两侧的长度较短。

算法

int longest(char str[], int n)
START
STEP 1 : DECLARE length AS 0 AND i AS n/2
STEP 2 : IF n < 2 THEN
RETURN 1
STEP 3 :LOOP WHILE TILL str[i]!=''
IF str[i] == str[length] THEN,
INCREMENT length BY 1
INCREMENT i BY 1
ELSE
IF length == 0 THEN,
INCREMENT i BY 1
ELSE
DECREMENT length BY 1
END IF
END IF
END WHILE
RETURN length
STOP

登录后复制

示例

#include
int longest(char str[], int n){
int length = 0, i = n/2;
if( n < 2 )
return 1;
while( str[i]!='' ){
//When we find the character like prefix in suffix,
//we will move the length and i to count the length of the similar prefix and suffix
if (str[i] == str[length]){
++length;
++i;
} else //When prefix and suffix not equal{
if(length == 0)
++i;
else
--length;
}
}
return length;
}
int main(int argc, char const *argv[]){
char str[] = {"abccmmabcc"};
int n = sizeof(str)/sizeof(str[0]);
int length = longest(str, n);
printf("Length = %d", length);
return 0;
}

登录后复制

输出

如果我们运行上面的程序,它将生成以下输出:

Length = 4

登录后复制

以上就是打印出给定字符串中既是该字符串前缀又是该字符串后缀的最长部分,在C程序中的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论