Untitled
unknown
plain_text
15 days ago
2.6 kB
4
Indexable
Never
String[] solution(String[] chain, String[] elements) { // To store the count of each golden element needed. Map<String, Integer> goldenElementCount = new HashMap<>(); for (String element : elements) { goldenElementCount.put(element, goldenElementCount.getOrDefault(element, 0) + 1); } // Variables to keep track of the sliding window. int left = 0, right = 0; int minLength = Integer.MAX_VALUE; int minLeft = 0, minRight = 0; int totalElementsNeeded = goldenElementCount.size(); int currentMatchedElements = 0; Map<String, Integer> windowElementCount = new HashMap<>(); // Start the sliding window. while (right < chain.length) { // Add the right element to the window. String rightElement = chain[right]; windowElementCount.put(rightElement, windowElementCount.getOrDefault(rightElement, 0) + 1); // Check if we have matched the count of a golden element. if (goldenElementCount.containsKey(rightElement) && windowElementCount.get(rightElement).equals(goldenElementCount.get(rightElement))) { currentMatchedElements++; } // Try to shrink the window till it contains all elements. while (currentMatchedElements == totalElementsNeeded && left <= right) { if (right - left + 1 < minLength) { minLength = right - left + 1; minLeft = left; minRight = right; } // Remove the left element from the window. String leftElement = chain[left]; windowElementCount.put(leftElement, windowElementCount.get(leftElement) - 1); // Check if we have removed a matched golden element. if (goldenElementCount.containsKey(leftElement) && windowElementCount.get(leftElement) < goldenElementCount.get(leftElement)) { currentMatchedElements--; } left++; } right++; } // If no such sub-chain exists that contains all elements. if (minLength == Integer.MAX_VALUE) { return new String[0]; } // Return the smallest sub-chain. String[] result = new String[minLength]; System.arraycopy(chain, minLeft, result, 0, minLength); return result; }
Leave a Comment