मान लीजिए कि हमारे पास समान लंबाई के दो तार 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