LeetCode算法日记:340.至多包含K个不同字符的最长子串

340.至多包含K个不同字符的最长子串

日期:2022/7/30

题目描述:给定一个字符串 *s* ,找出 至多 包含 k 个不同字符的最长子串 *T*

示例:

输入: s = "eceba", k = 2
输出: 3
解释: 则 T 为 "ece",所以长度为 3。

输入: s = "aa", k = 1
输出: 2
解释: 则 T 为 "aa",所以长度为 2。

思路:

双指针+哈希表

代码+解析:

class Solution {
public:
    int lengthOfLongestSubstringKDistinct(string s, int k) {
        if(k == 0) return 0;  	//k=0的话自然没有符合条件的子串
        if(s.size() == 1) return 1;   //已经排除了k=0的情况,那么不管k等于多少长度都只有1
        map match;  //哈希表
        int len = 0;  //长度
        int kind = 0;  //不同字符的个数
        int maxLen = 0;  //最大长度,最终返回的是这个
        int start = 0,end = 0;   //双指针
        
        while(end

执行用时:16 ms, 在所有 C++ 提交中击败了40.24%的用户

内存消耗:6.8 MB, 在所有 C++ 提交中击败了77.98%的用户

通过测试用例:142 / 142

你可能感兴趣的:(算法,leetcode,职场和发展)