Smallest window Java
- Get link
- X
- Other Apps
PROGRAM TO FIND THE SMALLEST WINDOW IN A STRING CONTAINING ALL CHARACTERS OF ANOTHER STRING
public
class
MAIN
{
static
final
int
no_of_chars =
256
;
// Function to find smallest window containing
// all characters of 'pat'
static
String findSubString(String str, String pat)
{
int
len1 = str.length();
int
len2 = pat.length();
// check if string's length is less than pattern's
// length. If yes then no such window can exist
if
(len1 < len2)
{
System.out.println(
"No such window exists"
);
return
""
;
}
int
hash_pat[] =
new
int
[no_of_chars];
int
hash_str[] =
new
int
[no_of_chars];
// store occurrence ofs characters of pattern
for
(
int
i =
0
; i < len2; i++)
hash_pat[pat.charAt(i)]++;
int
start =
0
, start_index = -
1
, min_len = Integer.MAX_VALUE;
// start traversing the string
int
count =
0
;
// count of characters
for
(
int
j =
0
; j < len1 ; j++)
{
// count occurrence of characters of string
hash_str[str.charAt(j)]++;
// If string's char matches with pattern's char
// then increment count
if
(hash_pat[str.charAt(j)] !=
0
&&
hash_str[str.charAt(j)] <= hash_pat[str.charAt(j)] )
count++;
// if all the characters are matched
if
(count == len2)
{
// Try to minimize the window i.e., check if
// any character is occurring more no. of times
// than its occurrence in pattern, if yes
// then remove it from starting and also remove
// the useless characters.
while
( hash_str[str.charAt(start)] > hash_pat[str.charAt(start)]
|| hash_pat[str.charAt(start)] ==
0
)
{
if
(hash_str[str.charAt(start)] > hash_pat[str.charAt(start)])
hash_str[str.charAt(start)]--;
start++;
}
// update window size
int
len_window = j - start +
1
;
if
(min_len > len_window)
{
min_len = len_window;
start_index = start;
}
}
}
// If no window found
if
(start_index == -
1
)
{
System.out.println(
"No such window exists"
);
return
""
;
}
// Return substring starting from start_index
// and length min_len
return
str.substring(start_index, start_index + min_len);
}
// Driver Method
public
static
void
main(String[] args)
{
String str =
"this is a test string"
;
String pat =
"tist"
;
System.out.print(
"Smallest window is :\n "
+
findSubString(str, pat));
}
}
OUTPUT
Smallest window is : t stri
- Get link
- X
- Other Apps
Comments
Post a Comment