কম্পিউটার

C++-এ সাধারণ সংক্ষেপণ


ধরুন একটি শব্দ আছে। আমাদের একটি ফাংশন সংজ্ঞায়িত করতে হবে যা একটি শব্দের সাধারণ সংক্ষিপ্ত রূপ তৈরি করতে পারে।

সুতরাং, যদি ইনপুট "শব্দ" এর মত হয়, তাহলে আউটপুট হবে ["word", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", "wo2", " 1o1d", "1or1", "w1r1", "1o2", "2r1", "3d", "w3", "4"]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি অ্যারে ret সংজ্ঞায়িত করুন

  • একটি ফাংশন সল্ভ(), এটি s, idx,

    লাগবে
  • যদি idx>=s এর আকার হয়, তাহলে −

    • ret এর শেষে s ঢোকান

    • ফেরত

  • y :=সূচক 0 থেকে idx - 1

    পর্যন্ত s এর সাবস্ট্রিং
  • i :=y

    এর আকার
  • num :=ফাঁকা স্ট্রিং

  • যখন (i>=0 এবং y[i] <='9' এর ASCII এবং y[i]>='0' এর ASCII), করুন −

    • সংখ্যা :=y[i] + সংখ্যা

    • (i 1 দ্বারা কমান)

  • যদি i y এর আকারের সমান না হয়, তাহলে −

    • ret :=সূচী থেকে s এর সাবস্ট্রিং (0 থেকে idx - (y - 1 - i এর আকার) - 1) সূচী থেকে s এর স্ট্রিং কনক্যাটেনেট সাবস্ট্রিং হিসাবে (0 থেকে idx)

    • s1 :=num + 1 স্ট্রিং হিসাবে

    • s2 :=স্ট্রিং হিসাবে সংখ্যা

    • যদি s1 এর আকার s2 এর আকারের সমান হয়, তাহলে −

    • অন্যথায়

      • সমাধান করুন(ret, idx + 1)

  • অন্যথায়

    • পূর্ববর্তী :=s[idx]

    • s[idx] :='1'

    • সমাধান (s, idx + 1)

    • s[idx] :=আগের

  • সমাধান (s, idx + 1)

  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -

  • সমাধান (শব্দ, 0)

  • রিটার্ন রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto< v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<string> ret;
   void solve(string s, int idx){
      if (idx >= s.size()) {
         ret.push_back(s);
         return;
      }
      string y = s.substr(0, idx);
      int i = y.size() - 1;
      string num = "";
      while (i >= 0 && y[i] <= '9' && y[i] >= '0') {
         num = y[i] + num;
         i--;
      }
      if (i != y.size() - 1) {
         string ret = s.substr(0, idx - (y.size() - 1 - i)) + to_string(stoi(num) + 1) + s.substr(idx + 1);
         string s1 = to_string(stoi(num) + 1);
         string s2 = to_string(stoi(num));
         if (s1.size() == s2.size())
            solve(ret, idx);
         else
            solve(ret, idx + 1);
      }
      else {
         char prev = s[idx];
         s[idx] = '1';
         solve(s, idx + 1);
         s[idx] = prev;
      }
      solve(s, idx + 1);
   }
   vector<string< generateAbbreviations(string word){
      solve(word, 0);
      return ret;
   }
};
main(){
   Solution ob;
   print_vector(ob.generateAbbreviations("hello"));
}

ইনপুট

hello

আউটপুট

[5, 4o, 3l1, 3lo, 2l2, 2l1o, 2ll1, 2llo, 1e3, 1e2o, 1e1l1, 1e1lo, 1el2, 1el1o, 1ell1, 1ello, h4, h3o, h2l1, h2lo, h1l2, h1l1o, h1ll1, h1llo, he3, he2o, he1l1, he1lo, hel2, hel1o, hell1, hello, ]

  1. C++ Enum

  2. C++ এ static_assert

  3. C++ এ স্ট্রিং থেকে বাইনারি ট্রি তৈরি করুন

  4. লিনাক্সে c++ এর জন্য শীর্ষ IDE কি?