From eeb297de983c4cac642c897284bbd0e58515ccb9 Mon Sep 17 00:00:00 2001 From: prasadruikar <69495970+prasadruikar@users.noreply.github.com> Date: Thu, 6 Oct 2022 19:16:08 +0530 Subject: [PATCH] Create substringWithConc.java --- substringWithConc.java | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 substringWithConc.java diff --git a/substringWithConc.java b/substringWithConc.java new file mode 100644 index 0000000..90dcf5e --- /dev/null +++ b/substringWithConc.java @@ -0,0 +1,40 @@ +class Solution { + public static List findSubstring(String s, String[] words) { + int n = s.length(); + int k = words.length; + int wordLength = words[0].length(); + int substringSize = wordLength * k; + HashMap wordCount = new HashMap<>(); + for (String word : words) { + wordCount.put(word, wordCount.getOrDefault(word, 0) + 1); + } + List arr = new ArrayList<>(); + for (int i = 0; i < wordLength; i++) { + HashMap wordMap = new HashMap<>(wordCount); + int right = i, left = i; + int wordUsed = 0; + while (right <= n - wordLength) { + String sub = s.substring(right, right + wordLength); + if(left < right){ + while ( left < right && ((wordMap.containsKey(sub) && wordMap.get(sub) <= 0) || !wordMap.containsKey(sub) || right - left == substringSize)) { + String leftSub = s.substring(left, left + wordLength); + if (wordMap.containsKey(leftSub)) { + wordMap.put(leftSub, wordMap.get(leftSub) + 1); + wordUsed--; + } + left = left + wordLength; + } + } + if (wordMap.containsKey(sub) && wordMap.get(sub) > 0) { + wordMap.put(sub, wordMap.get(sub) - 1); + wordUsed++; + } + right = right + wordLength; + if (wordUsed == k) { + arr.add(left); + } + } + } + return arr; + } +}