When I am trying to access map.get(c) in for loop (as shown in version 2), it returns null value and sets upper bound to be null, resulting in null-pointer exception. On the other hand, if I create end variable and assign it map.get(c) value (as shown in version 1), it works fine. So, would you please explain me why?
version 1: Works perfectly fine
int count=0;
int st=0;
string s = "abcabcbb";
Hashtable<Character, Integer> map = new Hashtable<Character, Integer>();
char[] str = s.toCharArray();
for(int i=0; i<str.length; i++){
char c = str[i];
if(map.get(c)==null){
map.put(c, i);
if(count < map.get(c) - st + 1){
count = map.get(c) - st + 1;
};
}
else {
int end = map.get(c); // End variable --> returns int value as expected
for(int j=st; j<=end; j++){
map.remove(str[j]);
st = j+1;
}
map.put(c,i);
}
}
System.out.println(count);
Version 2: Gives null-pointer exception
int count=0;
int st=0;
string s = "abcabcbb";
Hashtable<Character, Integer> map = new Hashtable<Character, Integer>();
char[] str = s.toCharArray();
for(int i=0; i<str.length; i++){
char c = str[i];
if(map.get(c)==null){
map.put(c, i);
if(count < map.get(c) - st + 1){
count = map.get(c) - st + 1;
};
}
else {
//int end = map.get(c); // End variable commented
for(int j=st; j<=map.get(c); j++){ // replaced end w map.get(c) --> returns null instead of int
map.remove(str[j]);
st = j+1;
}
map.put(c,i);
}
}
System.out.println(count);
Thanks for your help in advance! Rohan.