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

स्ट्रिंग को न्यूनतम लंबाई के साथ एनकोड करें - C++


मान लीजिए हमारे पास एक गैर-खाली स्ट्रिंग है; हमें इस स्ट्रिंग को एनकोड करना है ताकि इसकी एनकोडेड लंबाई न्यूनतम हो।

एनकोडिंग नियम इस प्रकार है − k[encoded_string], जहां [ ] के अंदर encoded_string को ठीक k बार दोहराया जा रहा है। हमें ध्यान रखना होगा कि k एक धनात्मक पूर्णांक होगा और एनकोडेड स्ट्रिंग खाली नहीं होगी या इसमें अतिरिक्त स्पेस नहीं होगा। हम मान सकते हैं कि इनपुट स्ट्रिंग में केवल लोअरकेस अक्षर हैं। यदि एनकोडिंग प्रक्रिया स्ट्रिंग को छोटा नहीं बनाती है, तो उस स्ट्रिंग को एनकोड न करें।

तो, यदि इनपुट "aaaaa" जैसा है, तो आउटपुट "5[a]" होगा क्योंकि "5[a]" "aaaaa" से 1 वर्ण छोटा है।

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

  • एक 2D ऐरे dp परिभाषित करें

  • collapse() नामक एक फ़ंक्शन परिभाषित करें, जो s, i, j लेगा,

  • temp := इंडेक्स (i से j - i) से s का सबस्ट्रिंग

  • x := temp को temp के साथ जोड़ें

  • pos = x में temp की स्थिति

  • यदि pos >= temp का आकार, तो −

    • temp लौटाएं

  • (temp का आकार / pos) को स्ट्रिंग के रूप में लौटाएं फिर '[' जोड़ें फिर dp[i,i+pos-1] जोड़ें फिर ']'

  • encode() नामक एक फ़ंक्शन परिभाषित करें, जो s लेगा,

  • n := s का आकार

  • dp := आकार n x n का एक 2D ऐरे परिभाषित करें

  • l := 1 से आरंभ करें, जब l <= n, अद्यतन करें (l को 1 से बढ़ाएं), करें −

    • i := 0, j := l - 1 से आरंभ करें, जब j < n, अद्यतन करें (i को 1 से बढ़ाएं), (j को 1 से बढ़ाएं), करें −

      • dp[i, j] := इंडेक्स i से j - i तक s का सबस्ट्रिंग

      • k := i से आरंभ करें, जब k < j, अद्यतन करें (k को 1 से बढ़ाएं), करें −

        • temp := dp[i, k] + dp[k + 1, j]

        • यदि temp का आकार < dp[i, j] का आकार, तो −

          • dp[i, j] := temp

      • rep := collapse(s, i, j)

      • यदि rep का आकार <= dp[i, j] का आकार, तो −

        • dp[i, j] := rep

  • dp[0, n - 1] लौटाएं

उदाहरण 

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −

#include <bits/stdc++.h> using namespace std; class Solution { public:    vector<vector<string>> dp;    string collapse(string &s, int i, int j) {       string temp = s.substr(i, j - i + 1);       string x = temp + temp;       auto pos = x.find(temp, 1);       if (pos >= temp.size())          return temp;       return to_string((temp.size() / pos)) + "[" + dp[i][i + pos - 1] + "]";    }    string encode(string s) {       int n = s.size();       dp = vector<vector<string>>(n, vector<string>(n, ""));       for (int l = 1; l <= n; l++) {          for (int i = 0, j = l - 1; j < n; i++, j++) {             dp[i][j] = s.substr(i, j - i + 1);             for (int k = i; k < j; k++) {                string temp = dp[i][k] + dp[k + 1][j];                if (temp.size() < dp[i][j].size()) {                   dp[i][j] = temp;                }             }             string rep = collapse(s, i, j);             if (rep.size() <= dp[i][j].size()) {                dp[i][j] = rep;             }          }       }       return dp[0][n - 1];    } }; main() {    Solution ob;    cout << (ob.encode("bbbbbbbbbb")); }

इनपुट

"bbbbbbbbbb"

आउटपुट

"10[b]"

  1. - C++ में सबस्ट्रिंग को दूसरी सबस्ट्रिंग से रिप्लेस करना

    यहां हम देखेंगे कि सबस्ट्रिंग को दूसरी सबस्ट्रिंग से कैसे रिप्लेस करें। यह स्ट्रिंग के उस हिस्से को रिप्लेस करता है जो कैरेक्टर पोजीशन pos से शुरू होता है और len कैरेक्टर्स तक फैला होता है। रिप्लेस फंक्शन की संरचना नीचे दी गई है: string& replace (size_t pos, size_t len, const string& str, s

  1. - C++ में स्ट्रिंग के एक भाग को दूसरी स्ट्रिंग से रिप्लेस करना

    यहां हम देखेंगे कि C++ में स्ट्रिंग के एक भाग को दूसरी स्ट्रिंग से कैसे रिप्लेस करें। C++ में रिप्लेस करना बहुत आसान है। string.replace() नामक एक फंक्शन है। यह रिप्लेस फंक्शन केवल मैच की पहली घटना को रिप्लेस करता है। सभी के लिए करने के लिए हमने लूप का उपयोग किया है। यह रिप्लेस फंक्शन उस इंडेक्स को

  1. - C++ में स्ट्रिंग की लंबाई खोजने का प्रोग्राम

    एक स्ट्रिंग एक एक-आयामी कैरेक्टर सरणी है जो नल कैरेक्टर द्वारा समाप्त होती है। स्ट्रिंग की लंबाई नल कैरेक्टर से पहले स्ट्रिंग में कैरेक्टर्स की संख्या होती है। उदाहरण के लिए। char str[] = “The sky is blue”; उपरोक्त स्ट्रिंग में कैरेक्टर्स की संख्या = 15 स्ट्रिंग की लंबाई खोजने का एक प्रो