题解 | #最小覆盖子串 双指针#

最小覆盖子串

http://www.nowcoder.com/practice/c466d480d20c4c7c9d322d12ca7955ac

import java.util.*;


public class Solution {
    /**
     * 
     * @param S string字符串 
     * @param T string字符串 
     * @return string字符串
     */
    public String minWindow (String s, String t) {
        if (s.length() < t.length()){
            return "";
        }
        
        //maps是确定选中字符串分别包含目标字符的个数
        //mapt可以生成最小覆盖字串所需要的目标字符的个数
        HashMap<Character, Integer> maps = new HashMap<>();
        HashMap<Character, Integer> mapt = new HashMap<>();
        char[] ct = t.toCharArray();
        
        //maps、mapt的生成
        for (char c : ct) {
            maps.put(c, 0);
            if (mapt.containsKey(c)){
                mapt.put(c, mapt.get(c) + 1);
            }else {
                mapt.put(c, 1);
            }
        }
		//left、right用于判断substring(left, right + 1)是否合法
        int left = 0;
        int right = 0;
        char[] cs = s.toCharArray();
        int minLen = Integer.MAX_VALUE;
        String ans = "";

        while (right < cs.length) {
        
            if (maps.containsKey(cs[right])) {
                maps.put(cs[right], maps.get(cs[right]) + 1);
            }

            while (isValidArray(maps, mapt)) {
                if (minLen > right - left + 1){
                    minLen = right - left + 1;
                    ans = s.substring(left, right + 1);
                }
                if (maps.containsKey(cs[left])) {
                    maps.put(cs[left], maps.get(cs[left]) - 1);
                }
                left++;
            }

            right++;
        }
        return ans;
    }

//isValidArray 判断字符串中maps各字符是否到达最低要求mapt的要求 public static boolean isValidArray(HashMap<Character, Integer> maps,HashMap<Character, Integer> mapt) { for (Character character : maps.keySet()) { if (maps.get(character) < mapt.get(character)){ return false; } } return true; } }

全部评论

相关推荐

05-24 14:12
门头沟学院 Java
点赞 评论 收藏
分享
06-15 20:57
已编辑
门头沟学院 Java
CARLJOSEPH...:年轻人有傲气很正常,但是建议工作前洗净傲气。 说实在的,什么奖学金什么奖项的都很一般。尊重你的老师,在有时间的时候去上课,真遇到走不开的事,请态度端正地向你的老师说明情况,请求请假。我相信任何一个有师德的老师都会允许的(我的老师就是这样)。
点赞 评论 收藏
分享
合不合适,我自己说了才算
码农索隆:hr:“真执着啊,来我公司当法人吧”
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务