C ++中具有最多K个不同字符的最长子字符串
假设我们有一个字符串;我们必须计算包含最多k个不同字符的最长子字符串T的长度。
因此,如果输入像s=“eceba”,k=2,则输出将为3,因为T为“ece”,其长度为3。
为了解决这个问题,我们将遵循以下步骤-
回答:=0
定义一张映射
n:=s的大小
x:=0
对于初始化j:=0,i:=0,当j<n时,更新(j增加1),-
(将m[s[i]]减1)
如果m[s[i]]等于0,则-
(将i增加1)
(将x减少1)
(将x增加1)
(将m[s[j]]增加1)
如果m[s[j]]与1相同,则-
而(x>k并且i<=j),做-
ans:=ans和(j-i+1)的最大值
返回ans
例
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int lengthOfLongestSubstringKDistinct(string s, int k) { int ans = 0; unordered_map<char, int> m; int n = s.size(); int x = 0; for (int j = 0, i = 0; j < n; j++) { m[s[j]]++; if (m[s[j]] == 1) x++; while (x > k && i <= j) { m[s[i]]--; if (m[s[i]] == 0) x--; i++; } ans = max(ans, j - i + 1); } return ans; } }; main() { Solution ob; cout << (ob.lengthOfLongestSubstringKDistinct("eceba", 2)); }
输入值
"eceba", 2
输出结果
3