मान लीजिए कि हमारे पास एक लोअरकेस वर्णमाला स्ट्रिंग है, हमें सबसे छोटी सबस्ट्रिंग की लंबाई (न्यूनतम लंबाई 2 है) का पता लगाना है, जैसे कि कुछ अक्षर संयुक्त अन्य अक्षरों की तुलना में अधिक दिखाई देते हैं। अगर हमें कोई समाधान नहीं मिल रहा है, तो -1 लौटें।
इसलिए, यदि इनपुट "abbbcde" जैसा है, तो आउटपुट 2 होगा, सबस्ट्रिंग "bb" की न्यूनतम लंबाई है और यह अन्य अक्षरों की तुलना में अधिक दिखाई देता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फ़ंक्शन को परिभाषित करें ठीक (), यह एक सरणी cnt लेगा,
-
कुल:=0, मैक्सवैल:=0
-
प्रत्येक तत्व के लिए इसे cnt में करें
-
कुल:=कुल + यह
-
maxVal :=maxVal का अधिकतम और यह
-
-
जब maxVal> (कुल - maxVal)
-
मुख्य विधि से, निम्न कार्य करें -
-
n :=s का आकार
-
रिट :=inf
-
इनिशियलाइज़ i :=0 के लिए, जब i
-
यदि i + 1
-
वापसी 2
-
-
अन्यथा जब i + 2
-
रिट :=3
-
-
-
वापसी (यदि रिट inf के समान है, तो -1, अन्यथा रिट)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool ok(vector <int>& cnt){
int total = 0;
int maxVal = 0;
for(auto& it : cnt){
total += it;
maxVal = max(maxVal, it);
}
return maxVal > (total - maxVal);
}
int solve(string s) {
int n = s.size();
int ret = INT_MAX;
for(int i = 0; i < n; i++){
if(i + 1 < n && s[i] == s[i + 1]){
return 2;
}else if(i + 2 < n && s[i] == s[i + 2]){
ret = 3;
}
}
return ret == INT_MAX ? -1 : ret;
}
};
int main(){
Solution ob;
cout << (ob.solve("abbbcde"));
} इनपुट
"abbbcde"
आउटपुट
2