Наивным способом было бы получить каждую подстроку строки A и посмотреть, находится ли она в строке B.
Вот наивный способ сделать это:
for ( int i = 0; i < a.length; i++ ) {
for ( int j = i+1; j <= a.length; j++ ) {
if (b.contains(a.substring(i, j))) {
//if longer than last found match, record this match
}
}
}
Чуть болееоптимальным способом было бы сначала посмотреть на более длинные подстроки, чтобы первая подходящая подстрока была обязательно самой длинной.
for ( int length = a.length; length > 0; length-- ) {
for ( int i = 0; i + length < a.length; i++ ) {
if ( b.contains(a.substring(i, i+length)) ) {
//this is the biggest match
}
}
}