题解 | #牛群名字覆盖#

牛群名字覆盖

https://www.nowcoder.com/practice/e6cef4702e7841f59cf47daf9bafb241?tpId=354&tqId=10595887&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D354

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @param t string字符串
     * @return string字符串
     */
    public String minWindow (String s, String t) {
        // write code here
        int[] charFrequency = new int[128];
        int requiredChars = t.length();
        int left = 0, right = 0, minLength = Integer.MAX_VALUE, start = 0;

        for (char c : t.toCharArray()) {
            charFrequency[c]++;
        }

        while (right < s.length()) {
            if (charFrequency[s.charAt(right)] > 0) {
                requiredChars--;
            }
            charFrequency[s.charAt(right)]--;
            right++;

            while (requiredChars == 0) {
                if (right - left < minLength) {
                    minLength = right - left;
                    start = left;
                }

                charFrequency[s.charAt(left)]++;
                if (charFrequency[s.charAt(left)] > 0) {
                    requiredChars++;
                }
                left++;
            }
        }

        return minLength == Integer.MAX_VALUE ? "" : s.substring(start,
                start + minLength);
    }
}

考察的知识点:

  1. 滑动窗口:使用滑动窗口来处理子串问题,移动窗口的左右指针。
  2. 字符频率统计:记录字符在字符串中的出现频率,以及跟踪需要出现的字符数。
  3. 字符串处理:在滑动窗口中对字符频率进行更新、比较和操作。

解题思路:

  1. 首先,创建一个字母表或者字符频率统计,用于记录指定英文字母 t 中每个字符的出现次数。
  2. 使用滑动窗口来在字符串 s 中找到一个最短的子串,该子串包含了所有 t 中的字符。定义左指针 left 和右指针 right,初始时均指向字符串的开头。
  3. 移动右指针 right 向右,直到找到一个子串,该子串包含了所有 t 中的字符。在每次移动右指针时,更新字符频率统计。
  4. 一旦找到包含所有 t 中字符的子串,记录当前窗口大小,并将左指针 left 向右移动,尝试缩小窗口大小。
  5. 继续移动右指针 right,不断更新字符频率统计,直到再次找到包含所有 t 中字符的子串。
  6. 重复步骤 4 和 5,直到右指针 right 到达字符串末尾。在这个过程中,记录下最小的子串长度和起始索引。
全部评论

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务