Упражнения по Java-строке: найти наименьшее окно в строке, содержащей все символы другой строки
Строка Java: упражнение 54 с решением
Напишите программу на Java, чтобы найти наименьшее окно в строке, содержащей все символы другой строки.
Пример решения:
Java-код:
import java.util.*;
class Main
{
public static String pickSubstring(String samp_str ,String pat_str)
{
int ln1 = samp_str.length();
int ln2 = pat_str.length();
if(ln1 < ln2)
{
System.out.println("No such window can exist");
return "";
}
int gvn_strg [] = new int[256];
int pat_stgr [] = new int[256];
for(int i=0;i<ln2;i++)
pat_stgr[pat_str.charAt(i)]++;
int ctr = 0,start = 0,start_index = -1,min_length = Integer.MAX_VALUE;
for(int j=0;j<ln1;j++)
{
gvn_strg[samp_str.charAt(j)]++;
if(pat_stgr[samp_str.charAt(j)] != 0 && gvn_strg[samp_str.charAt(j)] <= pat_stgr[samp_str.charAt(j)])
ctr++;
if(ctr == ln2)
{
while(gvn_strg[samp_str.charAt(start)] > pat_stgr[samp_str.charAt(start)] || pat_stgr[samp_str.charAt(start)] == 0)
{
if(gvn_strg[samp_str.charAt(start)] > pat_stgr[samp_str.charAt(start)] || pat_stgr[samp_str.charAt(start)] == 0)
gvn_strg[samp_str.charAt(start)]--;
start++;
}
int length_window = j - start + 1;
if(min_length > length_window)
{
min_length = length_window;
start_index = start;
}
}
}
if(start_index == -1)
{
System.out.println("No such window exists");
return "";
}
return samp_str.substring(start_index,start_index + min_length);
}
public static void main(String args[])
{
String str ="welcome to w3resource";
String pat ="tower";
System.out.println("The given string is: "+str);
System.out.println("Characters to find in the main string are: "+pat);
System.out.print("The smallest window which contains the finding characters is : " + pickSubstring(str, pat));
}
}
Пример вывода:
Данная строка: добро пожаловать в w3resource Символы для поиска в главной строке: башня Наименьшее окно, содержащее символы поиска: w3re
Блок - схема:
Редактор кода Java:
Улучшите этот пример решения и опубликуйте свой код через Disqus
Предыдущий: Напишите Java-программу для сопоставления двух строк, где одна строка содержит символы подстановки.
Далее: Напишите программу на Java для рекурсивного удаления всех смежных дубликатов из заданной строки.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования
disqus2code