문자열 "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]!='\0' 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 <stdio.h> int longest(char str[], int n){ int length = 0, i = n/2; if( n < 2 ) return 1; while( str[i]!='\0' ){ //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