public static String longestSubstring(String s, int k) {
		int[]map=new int[256];
		int ct=0, maxl=0;
		int[] r=new int[2];
		for (int i=0,j=0, n=s.length();i<n;++i) {
			if (map[s.charAt(i)]!=0||ct<k) {
				if (map[s.charAt(i)]==0)
					++ct;
				++map[s.charAt(i)];
			} else {
				while (ct==k) {
					if ((--map[s.charAt(j++)])==0)
						--ct;
				}
				++map[s.charAt(i)];
				++ct;
			}
			if (maxl<i-j) {
				maxl=i-j;
				r[0]=j;
				r[1]=i+1;
			}
		}
		return s.substring(r[0],r[1]);
	}