import
java.util.Arrays;
public
class
SubstringContainingPattern {
static
boolean
containsAllCharacters(String substr, String pattern) {
int
[] count =
new
int
[
256
];
for
(
char
ch : pattern.toCharArray())
count[ch]++;
for
(
char
ch : substr.toCharArray()) {
if
(count[ch] >
0
)
count[ch]--;
}
for
(
int
i =
0
; i <
256
; i++) {
if
(count[i] >
0
)
return
false
;
}
return
true
;
}
static
String findSmallestSubstring(String str, String pattern) {
int
lenStr = str.length();
int
lenPattern = pattern.length();
String smallestSubstring =
""
;
int
minLength = Integer.MAX_VALUE;
for
(
int
i =
0
; i < lenStr; i++) {
for
(
int
j = i; j < lenStr; j++) {
String substr = str.substring(i, j +
1
);
if
(containsAllCharacters(substr, pattern)) {
int
currentLength = substr.length();
if
(currentLength < minLength) {
minLength = currentLength;
smallestSubstring = substr;
}
}
}
}
return
smallestSubstring;
}
public
static
void
main(String[] args) {
String str1 =
"this is a test string"
;
String pattern1 =
"tist"
;
System.out.println(
"Input: string = \""
+ str1
+
"\", pattern = \""
+ pattern1 +
"\""
);
System.out.println(
"Output: \""
+ findSmallestSubstring(str1, pattern1) +
"\""
);
String str2 =
"geeksforgeeks"
;
String pattern2 =
"ork"
;
System.out.println(
"Input: string = \""
+ str2
+
"\", pattern = \""
+ pattern2 +
"\""
);
System.out.println(
"Output: \""
+ findSmallestSubstring(str2, pattern2) +
"\""
);
}
}