假设我们有一个字符串s;我们必须找到具有最多2个不同字符的最长子字符串t的长度。
因此,如果输入类似于“ eceba”,则输出将为3,因为t为“ ece”,其长度为3。
为了解决这个问题,我们将遵循以下步骤-
定义一个函数lengthOfLongestSubstringKDistinct()
,它将取s,k,
回答:= 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
从主要方法执行以下操作
返回lengthOfLongestSubstringKDistinct(s,2)
让我们看下面的实现以更好地理解-
#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; } int lengthOfLongestSubstringTwoDistinct(string s){ return lengthOfLongestSubstringKDistinct(s, 2); } }; main(){ Solution ob; cout << (ob.lengthOfLongestSubstringTwoDistinct("eceba")); }
"eceba"
输出结果
3