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