public static String longestSubstr(String s) {
		Map<Character, Integer> ct=new HashMap<>();
		int rel=0;
		int[] rec=new int[2];
		for (int i=0,j=0;i<s.length();++i) {
			char c=s.charAt(i);
			Integer val=ct.get(c);
			if (ct.size()<2||val!=null) {
				if (val!=null)
					ct.put(c,val+1);
				else 
					ct.put(c,1);
			} else {
				while (ct.size()==2) {
					c=s.charAt(j++);
					val=ct.put(c, ct.get(c)-1);
					if (val==1)
						ct.remove(c);
				}
				ct.put(s.charAt(i), 1);
			}
			if (rel<i-j) {
				rel=i-j;
				rec[0]=j;
				rec[1]=i+1;
			}
		}
		return s.substring(rec[0], rec[1]);
	}