Amazon | OA 2019 | Substrings of size K with K distinct chars

link

Slicing Window

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// import java.util.*;
class Solution {
static List<String> atMostK(String s, int k){
int start=0,end=0;
List<String> ls=new ArrayList<>();
Map<Character,Integer> map=new HashMap<>();
while(end<s.length()){
char chEnd=s.charAt(end);
if(map.containsKey(chEnd)) {
int pos=map.get(chEnd);
for(int i=start;i<=pos;i++){
map.remove(s.charAt(i));
}
start=pos+1;
}
map.put(chEnd,end);
end++;
while(map.size()>k){
char chStart=s.charAt(start);
map.remove(chStart);
start++;
}
String newStr=s.substring(start,end);
if(!ls.contains(newStr)) ls.add(newStr);
}
return ls;
}
static List<String> distinctK(String s,int k){
List<String> lsAtMostK=new ArrayList<>(atMostK(s, k));
for(String str:atMostK(s,k-1)) lsAtMostK.remove(str);
return lsAtMostK;
}
}
/*
public class MyClass {
public static void main(String[] args) {
String s="awaglknagawunagwkwagl";
int k=4;
System.out.println("\nString: "+s+", k: "+k);
System.out.println(Solution.distinctK(s, k));

String s1="abacab";
int k1=3;
System.out.println("\nString: "+s1+", k: "+k1);
System.out.println(Solution.distinctK(s1, k1));
}
}*/

0%