题目描述
Given two strings, you have to tell the length of the Longest Common Substring of them.
For example:
str1 = banana
str2 = cianaic
So the Longest Common Substring is "ana", and the length is 3.
For example:
str1 = banana
str2 = cianaic
So the Longest Common Substring is "ana", and the length is 3.
输入描述:
The input contains several test cases. Each test case contains two strings, each string will have at most 100000 characters. All the characters are in lower-case. Process to the end of file.
输出描述:
For each test case, you have to tell the length of the Longest Common Substring of them.
示例1
输入
banana cianaic
输出
3
#include<iostream> #include<string.h> using namespace std; const int Max = 100000 + 10; char a[Max]; char b[Max]; struct Node { char *suf; bool flag; }; Node suffix[Max * 2]; int com(const void * a, const void *b) { return strcmp(((Node *)a)->suf, ((Node *)b)->suf); } int comLen(char *a, char *b) { int len = 0; while(*a++ == *b++) len ++; return len; } int main() { int max; while(scanf("%s %s", a, b) != EOF) { int lenA = strlen(a); int lenB = strlen(b); for(int i=0; i<lenA; i++) suffix[i].suf = a+i, suffix[i].flag = false; for(int i=0; i<lenB; i++) suffix[i+lenA].suf = b+i, suffix[i+lenA].flag = true; qsort(suffix, lenA+lenB, sizeof(Node), com); max = 0; int temp; for(int i=0; i<lenA+lenB-1; i++) if((suffix[i].flag != suffix[i+1].flag) && (temp = comLen(suffix[i].suf, suffix[i+1].suf)) > max) max = temp; printf("%d\n", max); } return 0; }