मान लीजिए कि हमारे पास एक स्ट्रिंग s है; हमें सबसे लंबे सबस्ट्रिंग t की लंबाई ज्ञात करनी होगी जिसमें अधिकतम 2 अलग-अलग वर्ण हों।
इसलिए, यदि इनपुट "eceba" जैसा है, तो आउटपुट 3 होगा क्योंकि t "ece" है जिसकी लंबाई 3 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक फ़ंक्शन को परिभाषित करें lengthOfLongestSubstringKDistinct(), इसमें s, k,
लगेगा -
उत्तर:=0
-
एक नक्शा परिभाषित करें मी
-
n :=s का आकार, x :=0
-
प्रारंभ करने के लिए j :=0, i :=0, जब j
-
(m[s[j]] 1 से बढ़ाएं)
-
अगर m[s[j]] 1 के समान है, तो -
-
(x 1 से बढ़ाएँ)
-
-
जबकि (x> k और i <=j), करते हैं -
-
(मी [s[i]] 1 से घटाएं)
-
अगर m[s[i]] 0 के समान है, तो -
-
(x 1 से घटाएं)
-
-
(मैं 1 से बढ़ाइए)
-
-
उत्तर:=अधिकतम उत्तर और j - i + 1
-
-
वापसी उत्तर
-
मुख्य विधि से निम्न कार्य करें
-
वापसी की लंबाईOfLongestSubstringKDistinct(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