#include <stdio.h>
int main()
{
char str[2][301] = {0};
int max_len = 0;
int max_left = 0;
for(int i = 0; i < 2; i++)
{
if(scanf("%s", str[i]) == EOF)
{
return -1;
}
}
int len0 = strlen(str[0]);
int len1 = strlen(str[1]);
int size = 0;
int str0_left;
int str0_right;
int str1_left;
int str1_right;
int left_stop;
int right_stop;
char* len_short = NULL;
char* len_long = NULL;
/* len_short 指向短字符串, len_long指向长字符串, 便于处理最长子串有相同,需要取短串中最先出现的情况 */
if(len0 > len1)
{
len_short = str[1];
len_long = str[0];
}
else
{
len_short = str[0];
len_long = str[1];
}
len0 = strlen(len_short);
len1 = strlen(len_long);
for(int i = 0; i < strlen(len_short); i++)
{
for(int j = 0; j < strlen(len_long); j++)
{
if(len_short[i] == len_long[j])
{
str0_left = i - 1;
str0_right = i + 1;
str1_left = j - 1;
str1_right = j + 1;
left_stop = 0;
right_stop = 0;
size = 1;
while(
(str0_left >= 0 && str1_left >= 0 && len_short[str0_left] == len_long[str1_left])
|| (str0_right <= len0 && str1_right <= len1 && len_short[str0_right] == len_long[str1_right])
)
{
int left_equals = 0;
int right_equals = 0;
if(str0_left >= 0 && str1_left >= 0)
{
left_equals = (len_short[str0_left] == len_long[str1_left]) ? 1 : 0 ;
/* 左指针标识停止滑动 */
left_stop = left_equals;
}
if(str0_right < len0 && str1_right < len1)
{
right_equals = (len_short[str0_right] == len_long[str1_right]) ? 1 : 0 ;
/* 右指针标识停止滑动 */
right_stop = right_equals;
}
/* 左右字符均相同,累加2 */
if(left_equals && right_equals)
{
size += 2;
}
else
{
size++;
}
if(left_stop)
{
str0_left--;
str1_left--;
}
if(right_stop)
{
str0_right++;
str1_right++;
}
}
if(size > max_len)
{
// printf("size = %d, i = %d, str0_left = %d, str0_right = %d, str1_left = %d, str1_right = %d \n", size, i, str0_left, str0_right, str1_left, str1_right);
// 左指针始终指向 实际位置的 上一位置 ,需加1
max_left = str0_left + 1;
max_len = size;
}
}
}
}
for(int i = max_left; i < max_left + max_len; i++)
{
printf("%c", len_short[i]);
}
return 0;
}