static S longestCommonSubstring(S s1, S s2) { int Start = 0; int Max = 0; for (int i = 0; i < s1.length(); i++) { for (int j = 0; j < s2.length(); j++) { int x = 0; while (s1.charAt(i + x) == s2.charAt(j + x)) { x++; if ((i + x) >= s1.length() || (j + x) >= s2.length()) break; } if (x > Max) { Max = x; Start = i; } } } ret s1.substring(Start, Start + Max); }