Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में सामान्यीकृत संक्षिप्त नाम

मान लीजिए कोई शब्द है। हमें एक फ़ंक्शन को परिभाषित करना होगा जो किसी शब्द के सामान्यीकृत संक्षिप्त रूप को उत्पन्न कर सके।

इसलिए, यदि इनपुट "शब्द" की तरह है, तो आउटपुट ["शब्द", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", "wo2", " 1o1d", "1or1", "w1r1", "1o2", "2r1", "3d", "w3", "4"]

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक सरणी रिट परिभाषित करें

  • एक फ़ंक्शन हल करें () को परिभाषित करें, इसमें s, idx,

    . लगेगा
  • अगर idx>=s का आकार, तो −

    • रिट के अंत में s डालें

    • वापसी

  • y :=इंडेक्स 0 से idx - 1 में s का सबस्ट्रिंग - 1

  • मैं :=y का आकार

  • संख्या :=रिक्त स्ट्रिंग

  • जबकि (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 के स्ट्रिंग कॉन्टेनेट सबस्ट्रिंग के रूप में (संख्या + 1) को इंडेक्स (0 से idx)

    • s1 :=num + 1 स्ट्रिंग के रूप में

    • s2:=स्ट्रिंग के रूप में संख्या

    • यदि s1 का आकार s2 के आकार के समान है, तो -

    • अन्यथा

      • हल करें (रिट, आईडीएक्स + 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 का उपयोग कैसे करें:एक गाइड एक एन्यूमरेटेड प्रकार एक उपयोगकर्ता-परिभाषित डेटा प्रकार है जिसे मानों की श्रेणी से एक मान असाइन किया जा सकता है। Enums अक्सर प्रोग्रामिंग में उपयोग किया जाता है जब एक चर केवल एक मान को विशिष्ट मानों के सेट से बाहर संग्रहीत करने में सक्षम होना चाहिए। उदाहरण के

  1. सी++ में static_assert

    static_assert एक ऐसा फ़ंक्शन है जो प्रोग्राम को आउटपुट के साथ बहुत अधिक गड़बड़ किए बिना प्रोग्राम को संकलित करने के बाद स्क्रीन में त्रुटि को प्रिंट करने के लिए उपयोगी है। पहले C++11 और C++14 में, static_assert की अलग-अलग कार्यक्षमता थी, जिसका अर्थ है कि हमें static_assert को परिभाषित करते हुए अपना

  1. सी ++ में स्ट्रिंग से बाइनरी ट्री का निर्माण करें

    मान लीजिए कि हमारे पास एक स्ट्रिंग है जिसमें कोष्ठक और पूर्णांक हैं। हमें उस स्ट्रिंग से एक बाइनरी ट्री बनाना है। संपूर्ण इनपुट एक बाइनरी ट्री का प्रतिनिधित्व करता है। इसमें एक पूर्णांक होता है जिसके बाद शून्य, एक या दो जोड़े कोष्ठक होते हैं। पूर्णांक रूट के मान का प्रतिनिधित्व करता है और कोष्ठक की