मान लीजिए कि हमारे पास एक स्ट्रिंग s है, और हमें उस दिए गए स्ट्रिंग (केवल लोअरकेस अक्षरों से मिलकर) के सबसे लंबे सबस्ट्रिंग T की लंबाई का पता लगाना है, ताकि T में प्रत्येक वर्ण कम दिखाई न दे कश्मीर टाइम्स से। इसलिए यदि स्ट्रिंग "ababbc" और k =2 है, तो आउटपुट 3 होगा और सबसे लंबा सबस्ट्रिंग "ababb" होगा, क्योंकि दो a और तीन b हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक पुनरावर्ती फ़ंक्शन बनाएं जिसे सबसे लंबा सबस्ट्रिंग () कहा जाता है, इसमें स्ट्रिंग s और आकार k होता है
- अगर k =1 है, तो स्ट्रिंग का आकार लौटाएं
- यदि स्ट्रिंग का आकार
- 26 आकार की एक सरणी c बनाएं, और इसे -1 से भरें
- n :=स्ट्रिंग का आकार
- मैं के लिए 0 से n की सीमा में
- यदि c[s[i] - 'a'] =-1, तो c[s[i] - 'a'] :=1, अन्यथा c[s[i] - 'a'] को 1 से बढ़ा दें।
- badChar :='*'
- मैं के लिए 0 से 25 की सीमा में
- यदि c[i] -1 नहीं है और c[i]
- अगर badChar ='*', तो n लौटाएं
- v :=badChar का उपयोग करके मूल स्ट्रिंग को विभाजित करके स्ट्रिंग्स की एक और सरणी
- उत्तर:=0
- i के लिए 0 से v के आकार के बीच
- उत्तर :=अधिकतम उत्तर और सबसे लंबा सबस्ट्रिंग(v[i], k)
- वापसी उत्तर
उदाहरण(C++)
बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
vector <string> splitString(string s, char x){
string temp = "";
vector <string> res;
for(int i = 0; i < s.size(); i++){
if(s[i] == x){
if(temp.size())res.push_back(temp);
temp = "";
}
else temp += s[i];
}
if(temp.size())res.push_back(temp);
return res;
}
int longestSubstring(string s, int k) {
if(k == 1)return s.size();
if(s.size() < k )return 0;
vector <int> cnt(26, -1);
int n = s.size();
for(int i = 0; i < n; i++){
if(cnt[s[i] - 'a'] == -1) cnt[s[i] - 'a'] = 1;
else cnt[s[i] - 'a']++;
}
char badChar = '*';
for(int i = 0; i < 26; i++){
if(cnt[i] != -1 && cnt[i] < k){
badChar = i + 'a';
break;
}
}
if(badChar == '*')return n;
vector <string> xx = splitString(s, badChar);
int ans = 0;
for(int i = 0; i < xx.size(); i++)ans = max(ans, longestSubstring(xx[i], k));
return ans;
}
};
main(){
Solution ob;
cout << ob.longestSubstring("ababbc", 2);
} इनपुट
"ababbc" 2
आउटपुट
5