public class strstrK {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(check1("facebook", "bookshelf", 3));
System.out.println(check2("facebook", "bookshelf", 3));
System.out.println(check1("facebook", "bookshelf", 4));
System.out.println(check2("facebook", "bookshelf", 4));
System.out.println(check1("facebook", "bookshelf", 5));
System.out.println(check2("facebook", "bookshelf", 5));
}
public static boolean check1(String A, String B, int k) {
if (A == null || B == null) {
return false;
}
for (int i = 0; i <= A.length() - k; i++) {
int j = 0;
String strA = A.substring(i, i + k);
for (; j <= B.length() - k; j++) {
String strB = B.substring(j, j + k);
if (strA.equals(strB)) {
return true;
}
}
}
return false;
}
public static boolean check2(String A, String B, int k) {
Set<String> setA = new HashSet<>();
for (int i = 0; i <= A.length() - k; i++) {
String strA = A.substring(i, i + k);
setA.add(strA);
}
for (int i = 0; i <= B.length() - k; i++) {
String strB = B.substring(i, i + k);
if (setA.contains(strB)) {
return true;
}
}
return false;
}
}
* Given an integer k>=1 and two strings A and B (length ~n each); * Figure out if there is any common substring of length at least k. * (i.e. any string of length at least k, that is a substring of both A and B) * * A="facebook", B="bookshelf", k=3 ==> true ^^^ ^^^ * A="facebook", B="bookshelf", k=4 ==> true ^^^^ ^^^^ * A="facebook", B="bookshelf", k=5 ==> false