मान लीजिए कि हमारे पास समान लंबाई के दो तार s और t हैं, और दोनों छोटे अक्षरों में हैं। विचार करें कि हमने पहले s को किसी भी क्रम में पुनर्व्यवस्थित किया है, फिर s को t में बदलने के लिए आवश्यक न्यूनतम परिवर्तनों की गणना करें।
इसलिए, यदि इनपुट s ="eccynue", t ="science" जैसा है, तो आउटपुट 2 होगा जैसे कि हम "eccynue" को "yccence" में पुनर्व्यवस्थित करते हैं, फिर y को s से बदलें और i के साथ दूसरा c, यह "विज्ञान" होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
रिट:=0
-
दो सरणियों cnt1 को s की आवृत्ति रखने के लिए और cnt2 को t की आवृत्ति रखने के लिए परिभाषित करें
-
इनिशियलाइज़ करने के लिए i:=0, जब i <26, अपडेट करें (i से 1 बढ़ाएँ), करें -
-
रिट :=रिट + मैक्स (cnt1[i] - cnt2[i], 0)
-
-
वापसी रिट
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int solve(string s, string t) {
int ret = 0;
vector <int> cnt1(26);
vector <int> cnt2(26);
for(int i = 0; i < s.size(); i++){
cnt1[s[i] - 'a']++;
}
for(int i = 0; i < t.size(); i++){
cnt2[t[i] - 'a']++;
}
for(int i = 0; i < 26; i++){
ret += max(cnt1[i] - cnt2[i], 0);
}
return ret;
}
};
int main(){
Solution ob;
cout << (ob.solve("eccynue", "science"));
} इनपुट
"eccynue", "science"
आउटपुट
2