import java.util.*;

/**
* 快慢指针,left指针指向左边当前字符的index,right指针指向右边当前字符的index,
* right逐渐右移,并且统计left到right之间当前字符的个数,
* 当left到right中有k个当前字符时,子串长度l1 = right - left + 1;
* 当right继续右移,为了保持left到right中只有k个当前字符,left也右移,
* 此时子串长度l2 = right - left + 1,比较l1与l2,取其中小,循环此过程
* 当'a'到'z'都以这种方式取完后,所得最小长度,即为最小子串长度。
*/
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param k int整型 
     * @return int整型
     */
    public int eliStr (String str, int k) {
        // write code here
        int num = 0;
        int min = Integer.MAX_VALUE;
        for(char i = 'a'; i <= 'z'; i++) {
            int l = getLength(str, String.valueOf(i), k);
            if(l == k) {
                return l;
            }
            if(l != -1) {
                min = Math.min(l, min);
            }
        }
        if(min == Integer.MAX_VALUE) {
            min = -1;
        }
        return min;
    }
    
    public int getLength(String str, String i, int k) {
        int num = 0;
        int left = str.indexOf(i);
        int right = left;
        int len = Integer.MAX_VALUE;
        while(right != -1) {
            num ++;
            if(num > k) {
                left = str.indexOf(i, left + 1);
                len = Math.min(right - left + 1, len);
            } else if(num == k) {
                len = Math.min(right - left + 1, len);
            }
            right = str.indexOf(i, right + 1);
        }
        if(len == Integer.MAX_VALUE) {
            len = -1;
        }
        return len;
    }
}