LeetCode 76. 最小覆盖子串

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

LeetCode 76. 最小覆盖子串_第1张图片

题目解析

通过题意可知,我们要从s字符串中找到包含t字符串的最小子串,因此我们可以通过哈希的方式来计算字符串中含有字符的次数和种类映射。定义两个哈希表,一个用来映射s字符串,一个用来映射t字符串。遍历s字符串并且记录遍历的字符以及出现次数,当该字符出现的次数等于t字符时,说明该字符已经符合条件,然后定义一个变量来记录。每有一个符合条件就count++;当count与t字符中的种类数相等时,当前子串就是s的覆盖子串了。

细节处理

如果此时s中不含有t的子串,返回-1;

代码

class Solution 
{
public:
    string minWindow(string s, string t) 
    {
        int ns=s.size();
        int nt=t.size();

        int s_hash[128]={0};
        int t_hash[128]={0};
        // kinds用来计算t字符串中字符的种类
        int kinds=0;
        for(auto&ch:t) 
        {
            if(t_hash[ch]==0) kinds++;
            t_hash[ch]++;
        }
        // 使用minlen来记录答案
        int minlen=INT_MAX;
        // begin来记录每次截取子串的起始位置
        int begin=-1;
        for(int left=0,right=0,count=0;right

你可能感兴趣的:(算法练习,leetcode,算法)