ধরুন আমাদের দুটি সমান-আকারের স্ট্রিং s এবং t আছে। এক ধাপে আমরা t এর যেকোনো অক্ষর বেছে নিতে পারি এবং অন্য অক্ষর দিয়ে প্রতিস্থাপন করতে পারি। s-এর একটি অ্যানাগ্রাম তৈরি করতে আমাদের ন্যূনতম সংখ্যক ধাপ বের করতে হবে। দ্রষ্টব্য:একটি স্ট্রিং এর একটি অ্যানাগ্রাম হল একটি স্ট্রিং যাতে একই অক্ষর থাকে একটি ভিন্ন (বা একই) ক্রম।
সুতরাং ইনপুট যদি হয় - “yxy” এবং “xyx”, তাহলে আউটপুট হবে 1, কারণ শুধুমাত্র একটি অক্ষর প্রতিস্থাপন করতে হবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
n :=s
এ অক্ষরের আকার -
একটি মানচিত্র m তৈরি করুন এবং s-এ উপস্থিত প্রতিটি অক্ষরের ফ্রিকোয়েন্সি দিয়ে এটি পূরণ করুন, আরেকটি মানচিত্র m2 তৈরি করুন এবং t-এ উপস্থিত প্রতিটি অক্ষরের ফ্রিকোয়েন্সি দিয়ে এটি পূরণ করুন
-
ret :=n
-
প্রতিটি কী-মানের জন্য এটি m
-এ যুক্ত করুন-
x :=এর সর্বনিম্ন মান এবং m2 [এর মান]
-
1 দ্বারা ret কমান
-
-
রিটার্ন রিটার্ন
উদাহরণ (C++)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: int minSteps(string s, string t) { int n = s.size(); map <char, int> m1; for(int i = 0; i < s.size(); i++){ m1[s[i]]++; } int ret = n; map <char, int> m2; for(int i = 0; i < t.size(); i++){ m2[t[i]]++; } map <char, int> :: iterator it = m1.begin(); while(it != m1.end()){ //cout << it->first << " " << it->second << " " << m2[it->first] << endl; int x = min(it->second, m2[it->first]); ret -= x; it++; } return ret; } }; main(){ Solution ob; cout << (ob.minSteps("yxy", "xyx")); }
ইনপুট
"yxy" "xyx"
আউটপুট
1