theshy

博客园 首页 新随笔 联系 订阅 管理

左神 

给你一个字符串s  一个字符串t

返回s中涵盖t所有字符的最短子串

class Solution {

    int f(String s, String t) {
        //1
        int ans = Integer.MAX_VALUE;
        char[] chs = s.toCharArray();
        char[] cht = t.toCharArray();
        int[] debt = new int[256];
        for (int i = 0; i < t.length(); i++) {
            debt[cht[i]]++;
        }
        int debtSum = t.length();
        int l = 0, r = 0;
        //2
        while (r < s.length()) {
            //r++ util fill
            while (debtSum > 0) {
                debt[chs[r]]--;
                if (debt[chs[r]] >= 0)
                    debtSum--;
                r++;
            }
            //l++ util miniest fill
            while (debtSum <= 0) {
                debt[chs[l]]++;
                if (debt[chs[l]] > 0) {
                    ans = Math.min(ans, r - l + 1);
                    debtSum++;
                }
                l++;
            }
        }
        return ans;
    }

}

 

posted on 2022-01-02 10:29  tziSher  阅读(38)  评论(0编辑  收藏  举报