কম্পিউটার টিউটোরিয়াল

C++-এ স্ট্রিংসে ফাইন্ড অ্যান্ড রিপ্লেস অপারেশন

মান করুন আমাদের একটি স্ট্রিং S দেওয়া আছে, আমরা কিছু রিপ্লেসমেন্ট অপারেশন করব যা অক্ষর গোষ্ঠীকে নতুন দিতে পারবে। প্রতিটি রিপ্লেসমেন্ট অপারেশনে ৩টি প্যারামিটার থাকে − একটি শুরুতে ইনডেক্স i, একটি সোর্স ওয়ার্ড x এবং একটি টার্গেট ওয়ার্ড y। নিয়ম হল যদি x মূল স্ট্রিং S-এ পজিশন i-এ শুরু হয়, তবে আমরা x-এর ঘটনাটিকে y-দ্বারা রিপ্লেস করব। অন্যথায়, কিছু করব না।

উদাহরণস্বরূপ, যদি S = "abcd" এবং রিপ্লেসমেন্ট অপারেশন i = 2, x = "cd", y = "ffff" হয়, তবে যেহেতু "cd" মূল স্ট্রিং S-এ পজিশন 2-এ শুরু হয়, আমাদের এটিকে "ffff" দিয়ে রিপ্লেস করতে হবে।

আরেকটি উদাহরণ S = "abcd" জন্য, যদি দুটি রিপ্লেসমেন্ট অপারেশন থাকে: i = 0, x = "ab", y = "eee" এবং i = 2, x = "ec", y = "ffff", তবে দ্বিতীয় অপারেশন কিছু করবে না কারণ মূল স্ট্রিং-এ S[2] = 'c', যা x[0] = 'e'-এর সাথে মেলে না।

যদি আমাদের স্ট্রিং S = "abcd", ইনডেক্স = [0,2], সোর্স = ["a", "cd"], এবং টার্গেট = ["eee", "ffff"] হয়, তবে আউটপুট হবে "eeebffff"। কারণ "a" পজিশন 0-এ শুরু হয়, তাই "eee" দিয়ে রিপ্লেস। "cd" পজিশন 2-এ শুরু হয়, তাই "ffff" দিয়ে রিপ্লেস।

এটি সমাধান করার জন্য নিচের ধাপগুলি অনুসরণ করুন −

  • একটি পেয়ারের অ্যারে সংজ্ঞায়িত করুন, sorted নামে, n := indexes অ্যারের আকার
  • i = 0 থেকে n - 1 পর্যন্ত
    • (indexes[i], i) পেয়ার sorted-এ ইনসার্ট করুন
  • sorted-কে রিভার্স অর্ডারে সর্ট করুন
  • j = 0 থেকে n - 1 পর্যন্ত
    • i := sorted[j]-র প্রথম মান
    • src := sources[sorted[j].second]
    • target := targets[sorted[j].second]
    • যদি S-র সাবস্ট্রিং ইনডেক্স i থেকে সোর্সের আকার - ১ পর্যন্ত সোর্সের সাথে মিলে, তবে
      • S := S[0..i-1] + target + S[i + source.size()..]
  • S ফেরত দিন

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    string findReplaceString(string S, vector<int>& indexes, vector<string>& sources, 
        vector<string>& targets) {
        vector < pair <int, int> > sorted;
        int n = indexes.size();
        for(int i = 0; i < n; i++){
            sorted.push_back({indexes[i], i});
        }
        sort(sorted.rbegin(), sorted.rend());
        for(int j = 0; j < n; j++){
            int i = sorted[j].first;
            string source = sources[sorted[j].second];
            string target = targets[sorted[j].second];
            if(S.substr(i, source.size()) == source){
                S = S.substr(0, i) + target + S.substr(i + source.size());
            }
        }
        return S;
    }
};

main(){
    vector<int> v1 = {0, 2};
    vector<string> v2 = {"a", "cd"};
    vector<string> v3 = {"eee", "ffff"};
    Solution ob;
    cout << (ob.findReplaceString("abcd", v1, v2, v3));
}

ইনপুট

"abcd" [0, 2] ["a", "cd"] ["eee", "ffff"]

আউটপুট

eeebffff
  1. ax + by = n সমীকরণ সমাধান করে x, y বের করা (C++)

  2. অ্যারে থেকে ২, ৩, ৫ দ্বারা বিভাজ্য সর্বোচ্চ সংখ্যা বের করা (C++)

  3. স্ট্রিং-এ প্রথম রিপিটেড ওয়ার্ড বের করা (C++)

  4. C++ দিয়ে একটি স্ট্রিংয়ের সাবস্ট্রিং-এর সংখ্যা বের করা