मान लीजिए कोई शब्द है। हमें एक फ़ंक्शन को परिभाषित करना होगा जो किसी शब्द के सामान्यीकृत संक्षिप्त रूप को उत्पन्न कर सके।
इसलिए, यदि इनपुट "शब्द" की तरह है, तो आउटपुट ["शब्द", "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, ]